如果用户名已被使用,我想检查我注册新用户的时间,因此我有一个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,谢谢你的帮助!
答案 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语句。