【问题标题】:How to output one element of an Array List?如何输出数组列表的一个元素?
【发布时间】:2016-11-05 18:29:16
【问题描述】:

对于我的作业,我必须演示从数组列表中删除用户(完成),然后使用迭代器遍历数组列表,而不是从列表中删除用户,我必须从该列表中只输出一个特定用户.这个问题类似于我关于删除元素的另一个问题,但不同之处在于我询问如何遍历列表并输出一个用户,而不是从列表中删除用户。我尝试使用包含 if 语句并使用 .next() 函数的 while 循环,但这似乎并没有输出 1 个用户,因为它仍然输出所有用户。我将分享重现这部分程序的相关代码:

主类(用于调用方法)

package main;

public class Main{
 public static void main(String[] args) {

    System.out.println("***********Iteration of administrators***********");
    UserGroup2 userGroupObject2 = new UserGroup2();
for (User secondusergroup : userGroupObject2.getUserGroup())
{
   userGroupObject2.getUserIterator();
   System.out.println(secondusergroup.toString()); 
}

     }
}
}

UserGroup2 类(已创建数组列表的位置)

package main;
import java.util.ArrayList;
import java.util.Iterator;

public class UserGroup2 implements Iterable<UserGroup2> {

ArrayList<User> administrators = new ArrayList<>();

public UserGroup2()
{
  addUser(new User("lnb1g16", "Student", "Lee"));
  addUser(new User("hpf1g17", "Staff", "Harry"));
  addUser(new User("jks1g25", "Student", "Jordon"));
  addUser(new User("ohw1237", "Admin", "Oliver"));
  addUser(new User("ahs1213", "Student", "Jordon"));
  addUser(new User("bdh1285", "Admin", "Bob"));
  addUser(new User("tqn1294", "Student", "Taylor"));
}
public void addUser(User inUser)
{
  //userGroup.add(new User("LeeB123", "Staff", "Lee"));
  administrators.add(inUser);
}
public ArrayList<User> getUserGroup() {
    return administrators;
}
public void getUserIterator()  {
    Iterator<User> it2 = administrators.iterator();    
    while (it2.hasNext()) {
        User xxx = it2.next();

        if (xxx.getUsername().equals("jks1g25")) {

            it2.next();
        }
    }
}
}

用户类(用户的详细信息)

package main;

class User {

  String username;
  String userType;
  String name;


    User(String username, String userType, String name) {

    this.username = username;
    this.userType = userType;
    this.name = name;
    }

  public String getUsername() {
      return username;
  }

  public String getUserType() {
      return userType;
  }

   public String getName() {
      return name;
  }

  public String setUserType(String admin) {
      return userType = "admin";
  }
  @Override
public String toString() {
    return username + " " + userType;
}    
}

我已经尝试在线搜索如何执行此操作,但我似乎找不到指定如何输出数组列表的一个元素的来源,因此这可能会帮助其他可能遇到相同问题的人,任何帮助都是赞赏,谢谢。

【问题讨论】:

  • 而不是it2.next()里面的if,你不能做System.out.println(xxx);吗?
  • 我有它,所以它得到了列表的第 6 次迭代,但似乎每次遍历数组列表时都会打印出这个迭代,并且它会为每个用户遍历数组列表,所以它是为程序中的每个用户打印此迭代。有人知道如何解决这个问题,让它只打印一次吗?

标签: java arraylist


【解决方案1】:
  • 你应该尽量让你的 cade 尽可能简单。

  • 您不想实现 Iterable,如果您确实需要能够迭代您的类,那么您应该实现 Iterator。 (见此:https://stackoverflow.com/a/22357335/4088809

  • 将类的成员设为私有以确保封装,如果需要访问这些成员,请使用适当的 getter。

User.java

package main;


public class User {
  //Set the members of this class to private
  //This is to ensure encapsulation 
  private String username;
  private String userType;
  private String name;

  User(String username, String userType, String name) {
    this.username = username;
    this.userType = userType;
    this.name = name;
  }

  public String getUsername() {
    return username;
  }

  public String getUserType() {
    return userType;
  }

  public String getName() {
    return name;
  }

  //Set the usertype using the admin parameter
  //instead of the string admin
  //otherwise all the users will be admin
  public String setUserType(String admin) {
    return userType = admin;
  }

  @Override
  public String toString() {
    return username + " " + userType;
  }    
}

UserGroup2.java

package main;

import java.util.ArrayList;


//no need to implement Iterator, since you only add element 
//to an arraylist and nothing else.
public class UserGroup2 {

private ArrayList<User> administrators = new ArrayList<>();

public UserGroup2() {
  addUser(new User("lnb1g16", "Student", "Lee"));
  addUser(new User("hpf1g17", "Staff", "Harry"));
  addUser(new User("jks1g25", "Student", "Jordon"));
  addUser(new User("ohw1237", "Admin", "Oliver"));
  addUser(new User("ahs1213", "Student", "Jordon"));
  addUser(new User("bdh1285", "Admin", "Bob"));
  addUser(new User("tqn1294", "Student", "Taylor"));
}

public void addUser(User inUser) {
  this.administrators.add(inUser);
}

public ArrayList<User> getAdministrators() {
    return administrators;
}

} 

Main.java

package main;

public class Main{
 public static void main(String[] args) {
    System.out.println("***********Iteration of administrators***********");

    //Create the user group
    UserGroup2 userGroupObject2 = new UserGroup2();

    //Get and iterate over the arraylist inside usergroup2
    for (User currentUser : userGroupObject2.getAdministrators()) {
      //Compare the current user to the username we are searching for
      if (currentUser.getUsername().equals("jks1g25"))
        System.out.println(currentUser.toString());
    }
  }
}

【讨论】:

  • 这成功了,我将通过代码并分析如何正确地做到这一点,非常感谢您的帮助。
【解决方案2】:

我会试着一步一步解释。

// This does nothing. It doesn't modify the array, and it doesn't print anything
userGroupObject2.getUserIterator(); 
// This will just output the user name and type
System.out.println(secondusergroup.toString()); 

基本上,这已经完成了你的任务:

for (User user: userGroupObject2.getUserGroup()) {

   if ("jks1g25".equals(secondusergroup.getUsername()) { 
       System.out.println(secondusergroup);
       break;
   }    
}

如果你必须明确使用迭代器:

Iterator<User> it = userGroupObject2.getUserGroup().iterator();

while (it.hasNext()) {

    User u = it.next();

    if ("jks1g25".equals(secondusergroup.getUsername()) { 
       System.out.println(secondusergroup);
       break;
    }    
}

【讨论】:

  • 如果我把它放在主类或 UserGroup2 类中,这些都不起作用,不太清楚为什么
猜你喜欢
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多