2016-11-05 4 views
1

Für meine Aufgabe muss ich demonstrieren, einen Benutzer aus einer Array-Liste zu entfernen (fertig) und dann die Array-Liste mit einem Iterator durchlaufen und anstatt einen Benutzer aus der Liste zu entfernen, muss ich nur einen bestimmten Benutzer aus dieser Liste ausgeben. Diese Frage ähnelt meiner anderen Frage zum Entfernen eines Elements, unterscheidet sich aber in der Art und Weise, wie ich durch die Liste iterieren und einen Benutzer ausgeben möchte, anstatt einen Benutzer aus der Liste zu entfernen. Ich habe versucht, eine while-Schleife zu verwenden, die eine if-Anweisung enthält und die .next() -Funktion verwendet, aber dies scheint nicht 1 Benutzer auszugeben, da es immer noch alle Benutzer ausgibt. Ich werde für die Wiedergabe von diesem Teil des Programms den entsprechenden Code teilen:Wie wird ein Element einer Array-Liste ausgegeben?

Hauptklasse (verwendet, um die Methode aufzurufen)

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 Klasse (wo die Array-Liste erstellt wurde)

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

Benutzerklasse (Details für Benutzer)

Ich habe versucht, online zu suchen, wie man dies tut, aber ich kann nicht scheinen, eine Quelle zu finden, die angibt, wie man ein Element der Array-Liste ausgibt, dies kann anderen helfen, die auf dem gleichen Problem feststecken könnten Hilfe wird geschätzt, danke.

+0

Anstatt 'it2.next()' innerhalb des 'if', können Sie' System.out.println (xxx); '? – 4castle

+0

werfen Sie einen Blick auf die ArrayList-Dokumentation: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html # get (int) – giZm0

+0

Ich habe es so, dass es die 6. Iteration der Liste bekommt, aber es scheint, diese Iteration für jedes Mal auszudrucken, wenn es durchgeht Die Array-Liste und es wird die Array-Liste für jeden Benutzer durchlaufen, so dass diese Iteration für jeden Benutzer im Programm gedruckt wird. Kann jemand das beheben, so dass es nur einmal ausgedruckt wird? – John123

Antwort

0
  • Sie sollten versuchen, Ihre Cade so einfach zu machen wie möglich.

  • Sie möchten nicht Iterable implementieren, wenn Sie wirklich über Ihre Klasse iterieren müssen, ist es Iterator, den Sie implementieren sollten. (Siehe hierzu: https://stackoverflow.com/a/22357335/4088809)

  • Machen Sie die Member Ihrer Klasse privat, um die Kapselung sicherzustellen, und wenn Sie auf diese zugreifen müssen, verwenden Sie den entsprechenden 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()); 
    } 
    } 
} 
+0

Dies funktionierte und ich werde durch den Code gehen und analysieren, wie es richtig geht, vielen Dank für Ihre Hilfe. – John123

0

Ich werde versuchen, dies Schritt für Schritt zu erklären.

// 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()); 

Grundsätzlich wird dies bereits Ihre Aufgabe abzuschließen:

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

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

Und wenn Sie müssen Iterator verwenden ausdrücklich:

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

while (it.hasNext()) { 

    User u = it.next(); 

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

Nichts davon funktioniert, wenn ich es entweder in der Hauptklasse oder der UserGroup2-Klasse, nicht zu sicher, warum – John123

Verwandte Themen