Java为什么每个循环都不起作用?

时间:2016-07-10 09:04:31

标签: java loops serialization foreach deserialization

如果用户名已被使用,我想检查我注册新用户的时间,因此我有一个Vector<Users>的课程,我将所有用户保存在他们的参数中。但是当我使用我的函数usernameExist(String nuovo)时,只将列表中的第一个用户名与我插入的字符串进行比较。我还实现了Serializable接口,因此我每次都可以加载我的用户列表,但它可以正常工作。如果我使用Iterator读取所有列表我没有问题,但每个使用for-each循环的函数都不起作用。

 //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,谢谢你的帮助!

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

达到的第一个return语句将再次退出该方法,因此每当您到达lista中的第一个元素时,它将返回:

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时,才会执行return语句。