2016-07-10 4 views
-2

Ich möchte überprüfen, wenn ich einen neuen Benutzer registrieren, wenn ein Benutzername bereits verwendet wird, so habe ich eine Klasse mit einem Vector<Users>, wo ich alle meine Benutzer mit ihren Parametern speichern. Aber wenn ich meine Funktion usernameExist(String nuovo) verwende, die nur den ersten Benutzernamen in der Liste mit der Zeichenfolge vergleichen, die ich eingefügt habe. Ich habe auch implementiert Serializable Schnittstelle, so dass ich meine Liste von Benutzern jedes Mal laden kann, aber es funktioniert ordnungsgemäß. Wenn ich einen Iterator verwende, um alle Listen zu lesen, habe ich kein Problem, aber jede Funktion, die für jede Schleife verwendet, funktioniert nicht.Java Warum funktioniert das nicht für jede Schleife?

//Constructor 
public UsersList() 
{ 
    list = new Vector<User>(); 
} 

//The method i use to check if the username exist 
public boolean usernameExist(String nuovo) 
{ 
    for(User user : lista) 
    { 
     return user.matchUsername(nuovo); 
    } 
    return false; 
} 

//In the class User 
//Constructor of User 
public User(String nome, String cognome, String email, String username, String password) 
{ 
    //Variable initialization 
} 

public boolean matchUsername(String inserted) 
{ 
    return username.equalsIgnoreCase(inserted); 
} 

Es macht mich verrückt: D, danke für die Hilfe!

+5

Wie es fast immer der Fall ist, können Sie verstehen, wie dieser Code ausgeführt wird, indem Sie ihn in einem Debugger durchlaufen. Die Verwendung eines Debuggers ist keine fortgeschrittene Fähigkeit, sondern eine grundlegende Fähigkeit, die so schnell wie möglich erlernt und verwendet werden sollte. –

+0

Oft, wenn Sie ein neues Paket oder eine neue Technik verwenden, kann es scheinen, dass diese neue Technik die Ursache für Ihr Problem sein muss, wenn Sie oft etwas viel Grundlegenderes vergessen haben, wie zum Beispiel eine 'if'-Anweisung. Das hat nichts mit der Serialisierung zu tun. –

+0

@ T.J.Crowder Ich denke, das OP falsch angenommen, dass es etwas mit Serialisierung zu tun hatte, konnte aber nicht sehen, wie (weil es nicht ist). Ich schlage normalerweise vor, dass das OP einen Debugger benutzt, aber das OP hat beschrieben, was Sie in einem Debugger sowieso sehen konnten. Der Debugger sagt Ihnen nicht, wie Sie Code schreiben. ;) –

Antwort

3

In der Schleife, du bist immer bei der ersten Iteration der Rückkehr:

for (User user : lista) { 
    return user.matchUsername(nuovo); //always stops here 
} 

Was wollen Sie stattdessen nur zurückkehrt, wenn wahr:

for (User user : lista) { 
    if (user.matchUsername(nuovo)) { 
     return true; // stops only when true 
    } 
} 
+0

Vielen Dank !!! – pezza

0

Die erste aus erreicht return-Anweisung gehen Wenn Sie das erste Element innerhalb von lista erreichen, wird Folgendes zurückgegeben:

for(User user : lista) 
{ 
    return user.matchUsername(nuovo); 
} 
return false; 

Sie könnten dieses Problem beheben, indem Sie eine if-Bedingung wie hier mit:

for(User user : lista) 
{ 
    if(user.matchUsername(nuovo)) 
    { 
     return true; 
    } 
} 
return false; 

Das bedeutet nur, wenn user.matchUsername(nuovo) kehrt true, wird die return-Anweisung ausgeführt werden.