我在下面有此代码。假设我的列表中有3个用户。 userNo1 userNo2 userNo3 我想在控制台中传递用户名和密码,以便包含此循环的方法检查数据是否正确。 **我的问题是:**我想登录帐号3,但是控制台会打印2次“ ERROR”,然后打印“ OK”(我知道为什么,但是-它会检查列表中每个对象的状态,但是我无法提出解决方案) 如何更改此代码,以便仅在登录/通过正确时才写“ OK”,如果传递的数据错误则仅打印“ ERROR”一次?
System.out.print("Login: ");
String username = scanner.nextLine();
System.out.print("Password: ");
String password = scanner.nextLine();
for(User checkedUser : userList) {
if ((username.equals(checkedUser.getUsername())) &&
(password.equals(checkedUser.getPassword()))) {
System.out.println("OK");
} else {
System.out.println("ERROR");
}
}
答案 0 :(得分:0)
在满足条件后添加break;
语句以退出循环。
喜欢
boolean isAuthorized = false;
for(User checkedUser : userList) {
if ((username.equals(checkedUser.getUsername())) &&
(password.equals(checkedUser.getPassword()))) {
System.out.println("OK");
isAuthorized = true;
break;
}
}
if(!isAuthorized){
System.out.println("ERROR"); // auth failed
}
break;
语句立即退出循环
答案 1 :(得分:0)
好的,在Java 8中可以使用流。过滤所有等于用户名和密码的用户。返回布尔结果。
userList.stream()
.filter(x -> username .equals(x.getUsername()) && password.equals(x.getPassword()))
.findAny().isPresent();
if(exist)
{
System.out.println("OK");
}else
{
System.out.println("ERROR");
}
如果您使用的是Java版本<8,则对所有列表进行迭代(如果找到的话)将其破坏并返回true。否则,辅助变量将为false。
boolean exist = false;
for(User checkedUser : userList) {
if ((username.equals(checkedUser.getUsername())) &&
(password.equals(checkedUser.getPassword()))) {
exist = true;
break;
}
}
if(exist)
{
System.out.println("OK");
}else
{
System.out.println("ERROR");
}
答案 2 :(得分:0)
将用户名和密码作为键/值对存储在哈希图中。然后检查是否为map.containsKey(username)
,如果为true,则检查是否为password.equals(map.getValue(username)))
有效地,您可以在一行代码中完成以上操作
System.out.println(map.containsKey(username) && password.equals(map.getValue(username)) ? "OK" : "ERROR");
答案 3 :(得分:0)
如果您希望登录失败后仅打印一次“ ERROR”,则必须将print语句移出循环。只要print语句在循环内,您最终将获得多次打印。
为此,您还需要在循环之前声明一个变量,该变量将容纳在循环内进行的验证结果:
String result = "ERROR"
for(User checkedUser : userList) {
if ((username.equals(checkedUser.getUsername())) &&
(password.equals(checkedUser.getPassword()))) {
result == "OK";
break;
System.out.println(result);
答案 4 :(得分:0)
“错误”被多次打印,因为用户对象列表中的每个不匹配都会导致“错误”被打印。可以通过删除else语句并在循环外插入另一个if语句来避免这种情况:
System.out.print("Login: ");
String username = scanner.nextLine();
System.out.print("Password: ");
String password = scanner.nextLine();
boolean status = false;
for(User checkedUser : userList) {
if ((username.equals(checkedUser.getUsername())) &&
(password.equals(checkedUser.getPassword()))) {
System.out.println("OK");
status = true;
}
}
if(status == false)
System.out.println("ERROR");