2016-11-05 4 views
1

私の割り当てのためには、配列リストからユーザーを削除した後、イテレータを使用して配列リストを調べ、リストからユーザを削除する代わりに、そのリストから特定のユーザを1つだけ出力する必要があります。この質問は、要素の削除についての私の他の質問と似ていますが、ユーザーフォームをリストから削除するのではなく、リストを反復して1人のユーザーを出力する方法を尋ねる方法が異なります。私は、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(); 
     } 
    } 
} 
} 

Userクラス(ユーザの詳細)

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; 
}  
} 

私はこれを行う方法についてオンラインで検索しようとしましたが、配列リストの1つの要素を出力する方法を指定するソースを見つけることができないため、同じ問題に悩まされている可能性がある助けていただきありがとうございます。

+0

'it'の中の' it2.next() 'ではなく' System.out.println(xxx); 'を実行できませんか? – 4castle

+0

ArrayListのドキュメント(https://docs.oracle)をご覧ください。 – giZm0

+0

私はそれがリストの6番目の反復を取得するようにしていますが、それが通過するたびにこの繰り返しを出力しているようです。配列リストとそれは各ユーザーのための配列リストを通過するので、プログラム内のすべてのユーザーのためにこの繰り返しを印刷しています。誰もが一度だけ印刷するようにこれを修正する方法を知っていますか? – John123

答えて

0
  • をあなたのCADEのようにシンプルにしてみてくださいできるだけ。

  • Iterableを実装したくない場合は、実際にクラスを反復処理する必要がある場合は実装する必要があるIteratorです。 (これを参照してください:https://stackoverflow.com/a/22357335/4088809

  • カプセル化を確実にするためにクラスのメンバーをプライベートにして、アクセスする必要がある場合は適切なゲッターを使用してください。

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()); 
    } 
    } 
} 
+0

これはうまくいきました。コードを調べて、正しく実行する方法を分析します。 – John123

0

私はこの手順を一歩一歩説明しようとします。

// 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; 
    }  
} 
+0

メインクラスまたはUserGroup2クラスのいずれかに入れてもこの動作はありません。理由はわかりません。 – John123

関連する問題