我正在开发一个java应用程序,它从用户那里获取扫描仪字符串输入并比较两个字符串属性。目标是将该方法作为用户名和密码身份验证。代码编译但它似乎只循环遍历ArrayList中的第一行。
setup
答案 0 :(得分:0)
你只是让它变得更复杂。假设您的目标是在ArrayList中找到与提供的凭据匹配的用户,您可以使用for-each循环使其更容易。
for (User user : users)
users
此处为ArrayList
类型。User
个对象。 (我在这里假设这种类型,因为你没有提供你的问题。)然后只需与提供的凭据进行比较,并在匹配时终止循环。
if (user.getUserName().equals(userName) && user.getPassword().equals(password))
{
loggedInUser = user;
break;
}
这就是它的全部内容。
将其转换为代码,它看起来像这样:
User loggedInUser = null;
boolean found = false;
int index = 0;
while (!found)
{
if (index >= users.size())
break;
User user = users.get(index++);
if (user.getUserName().equals(userName) && user.getPassword().equals(password))
{
loggedInUser = user;
found = true;
}
}
到目前为止,很好,但我们甚至可以缩短它,并删除找到的布尔变量,并直接在那里使用索引。
int index = -1;
while (++index < users.size())
{
User user = users.get(index);
if (user.getUserName().equals(userName) && user.getPassword().equals(password))
{
loggedInUser = user;
break;
}
}
User loggedInUser = users.stream()
.filter(u -> u.getUserName().equals(userName))
.filter(u -> u.getPassword().equals(password))
.findFirst()
.orElse((User) null);
希望这有帮助。