我创建了一个包含" accounts"由用户创建。我现在正试图写一个"登录"循环遍历ArrayList并根据帐户ArrayList中已存在的帐户检查用户输入的函数。这是我的循环;
for(UserInfo createdUser : auctionAccounts){
if(enteredUser.equals(createdUser.userName) && enteredPass.equals(createdUser.passWord)){
System.out.println("Welcome: " +createdUser.userName);
returnToMenu();
}else{
System.out.println("Username or Password is wrong!");
loginAccount(aI);
}
}
如果ArrayList中只有一个帐户,这个工作绝对正常。但是,当列表中有多个帐户时,我只能登录到第一个帐户,之后没有帐户。
我也尝试使用ArrayList.contains()方法而不是.equals(),但这会产生相同的结果。
编辑:只是添加,这是我创建帐户的方式;
UserInfo createdUser = new UserInfo();
System.out.println("---- Enter a username ----");
createdUser.setUsername(scanner.next());
System.out.println("---- Enter a password ----");
createdUser.setPass(scanner.next());
this.aI.createAccount(createdUser);
accountHandler(aI);
答案 0 :(得分:2)
你应该做的第一件事就是删除循环中试图匹配用户名和密码的else
部分。
原因是,在您检查整个列表之前,您并不确定用户名/密码组合是否错误。
但是,如果用户输入的内容与列表中的第一个用户匹配,则告诉用户他们输入的信息 。
基本上,每次用户尝试登录时,您必须遍历整个列表,然后才能确定他们是否输入了正确的信息,因为您必须尝试将它们与每个现有用户匹配。
以下是您的代码的外观:
for(UserInfo createdUser : auctionAccounts){
if(enteredUser.equals(createdUser.userName) && enteredPass.equals(createdUser.passWord)){
System.out.println("Welcome: " +createdUser.userName);
returnToMenu();
}
}
// if this point is reached, then username and pw are invalid
System.out.println("Username or Password is wrong!");
如果您不想在每次用户尝试登录时遍历整个列表(因为对于足够多的用户来说这可能效率很低),您可以使用某种{{1将用户名绑定到正确的密码。这将允许您快速查找表并消除对所有用户的迭代:
Map