2016-07-10 4 views
-2

Я хочу проверить, когда я зарегистрирую нового пользователя, если имя пользователя уже используется, поэтому у меня есть класс с Vector<Users>, где я сохраняю всех своих пользователей с их параметрами. Но когда я использую свою функцию usernameExist(String nuovo), которая сравнивает только первое имя пользователя в списке со строкой, которую я вставил. Я также внедрил интерфейс Serializable, чтобы каждый раз загружать список пользователей, но он работает правильно. Если я использую Iterator для чтения всего списка, у меня нет проблем, но каждая функция, которая использует цикл for-each, не работает.Java Почему это для каждого цикла не работает?

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

Это делает меня сумасшедшим: D, благодарю вас за помощь!

+5

Как почти всегда, вы можете понять, как работает этот код, перешагнув его в отладчике. Использование отладчика не является передовым навыком, это фундаментальный навык, который следует изучить и использовать как можно скорее. –

+0

Часто, когда вы используете новый пакет или технику, может показаться, что эта новая техника должна быть причиной вашей проблемы, когда вы часто забыли что-то гораздо более основное, чем использование инструкции 'if'. т. е. это не имеет никакого отношения к сериализации. –

+0

@ T.J.Crowder Я думаю, что ОП неправильно предположил, что это как-то связано с сериализацией, но не могло видеть, как (потому что это не так). Обычно я предлагаю, чтобы OP использовал отладчик, но OP описал, что вы могли видеть в отладчике в любом случае. Отладчик не скажет вам, как писать код. ;) –

ответ

3

В вашем цикле, вы всегда возвращаются на первой итерации:

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

То, что вы хотите вместо этого возвращается только тогда, когда верно:

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

Большое спасибо !!! – pezza

0

Первый оператор возврата достиг выйдет метода, поэтому всякий раз, когда вы достигаете первого элемента внутри списка, он возвращается:

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

Вы можете исправить это с помощью if-условие, как здесь:

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

Это означает, что только когда user.matchUsername(nuovo) возвращается true, оператор возврата будет выполняться.