Java 当找到结果时,对于每个循环出口
下面是我的代码。假设我的列表中有3个用户。 用户编号1 用户编号2 用户编号3 我想在控制台中传递用户名和密码,以便包含此循环的方法检查数据是否正确。 **我的问题是:*我想登录账号3,但控制台打印了两次“ERROR”,最后是“OK”(我知道为什么,但它会检查列表中每个对象的这个条件,但我无法找到解决方案) 如何更改此代码,使其在登录/通过正确时只写“OK”,而在通过的数据错误时只打印一次“ERROR”Java 当找到结果时,对于每个循环出口,java,arrays,list,loops,Java,Arrays,List,Loops,下面是我的代码。假设我的列表中有3个用户。 用户编号1 用户编号2 用户编号3 我想在控制台中传递用户名和密码,以便包含此循环的方法检查数据是否正确。 **我的问题是:*我想登录账号3,但控制台打印了两次“ERROR”,最后是“OK”(我知道为什么,但它会检查列表中每个对象的这个条件,但我无法找到解决方案) 如何更改此代码,使其在登录/通过正确时只写“OK”,而在通过的数据错误时只打印一次“ERROR” 添加break语句 像 中断语句立即退出循环确定在Java8中可以使用流。筛选与密码相同的
添加
break满足退出循环的条件后的代码>语句
像
中断代码>语句立即退出循环确定在Java8中可以使用流。筛选与密码相同的任何用户。返回一个布尔结果
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");
}
将用户名和密码作为密钥/值对存储在hashmap中。然后检查是否map.containsKey(用户名)
,如果为true,检查是否password.equals(map.getValue(用户名))
您可以在一行代码中有效地完成上述操作
System.out.println(map.containsKey(username) && password.equals(map.getValue(username)) ? "OK" : "ERROR");
如果您希望在登录失败时只打印一次“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);
“错误”被打印多次,因为用户对象列表中的每个不匹配都会导致打印“错误”。可以通过删除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");
将所有代码直接作为文本发布在此处。每次尝试登录时,您都会遍历用户列表,我猜您会得到2倍的“ERROR”和“OK”,因为您使用的是UserNo3登录。使用哈希映射而不是列表来存储用户凭据。话虽如此,可能不是很安全。这仍然会打印“错误”两次,然后在检查UserNo3时打印“确定”,然后中断。当我尝试登录账号3时,它仍然会写入“错误”两次。它仍然会检查每个对象的状态,直到找到正确的对象:(试试这个。
String result = "ERROR"
for(User checkedUser : userList) {
if ((username.equals(checkedUser.getUsername())) &&
(password.equals(checkedUser.getPassword()))) {
result == "OK";
break;
System.out.println(result);
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");