Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当找到结果时,对于每个循环出口_Java_Arrays_List_Loops - Fatal编程技术网

Java 当找到结果时,对于每个循环出口

Java 当找到结果时,对于每个循环出口,java,arrays,list,loops,Java,Arrays,List,Loops,下面是我的代码。假设我的列表中有3个用户。 用户编号1 用户编号2 用户编号3 我想在控制台中传递用户名和密码,以便包含此循环的方法检查数据是否正确。 **我的问题是:*我想登录账号3,但控制台打印了两次“ERROR”,最后是“OK”(我知道为什么,但它会检查列表中每个对象的这个条件,但我无法找到解决方案) 如何更改此代码,使其在登录/通过正确时只写“OK”,而在通过的数据错误时只打印一次“ERROR” 添加break语句 像 中断语句立即退出循环确定在Java8中可以使用流。筛选与密码相同的

下面是我的代码。假设我的列表中有3个用户。 用户编号1 用户编号2 用户编号3 我想在控制台中传递用户名和密码,以便包含此循环的方法检查数据是否正确。 **我的问题是:*我想登录账号3,但控制台打印了两次“ERROR”,最后是“OK”(我知道为什么,但它会检查列表中每个对象的这个条件,但我无法找到解决方案) 如何更改此代码,使其在登录/通过正确时只写“OK”,而在通过的数据错误时只打印一次“ERROR”


添加
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");