在循环遍历Arraylist时在java中停止for循环?

时间:2015-05-13 14:34:49

标签: java for-loop arraylist

我正在为学校项目的登录系​​统编写部分验证。 我正在尝试遍历包含成员的ArrayList。它只适用于ArrayList中的一个对象,但只要有多个to for循环就会继续运行。

public void confirmation(TextField username, PasswordField password) throws NameException {
    data.loadDatabase();
    for (int i = 0; i < data.LoginMembers.size(); i++) {
        if (username.getText().equals(data.LoginMembers.get(i).getUsername())) {
            this.a = true;
            System.out.println("Username right");

            if (password.getText().equals(data.LoginMembers.get(i).getPassword())) {
                this.b = true;
                System.out.println("Password right");
                this.user = data.LoginMembers.get(i).getClass().getSimpleName().toString();
            } else {
                System.out.println("Password wrong")
                this.a = false;
                throw new NameException();
            }
        } else {
            System.out.println("Username wrong");
            this.a = false;
            throw new NameException();
        }
    }
}

5 个答案:

答案 0 :(得分:0)

您可以使用break;停止任何循环

答案 1 :(得分:0)

在密码正确的代码块中(或者您需要的任何其他地方),您可以添加以下行:

break;

答案 2 :(得分:0)

如果我理解正确,只要您验证用户密码,您想要从循环中退出,那么只需添加一个这样的中断:

public void confirmation(TextField username, PasswordField password) throws NameException
{
data.loadDatabase();
for(int i = 0; i < data.LoginMembers.size(); i++)
{
    if(username.getText().equals(data.LoginMembers.get(i).getUsername()))
    {
            this.a = true;
            System.out.println("Username right");

            if(password.getText().equals(data.LoginMembers.get(i).getPassword()))
            {
                this.b = true;
                System.out.println("Password right");
                this.user = data.LoginMembers.get(i).getClass().getSimpleName().toString();
                break;
            }
            else
            {
                System.out.println("Password wrong");
                this.a = false;
                throw new NameException();
            }
    } 

    else
    {
            System.out.println("Username wrong");
            this.a = false;
            throw new NameException();
    }


}

}

答案 3 :(得分:0)

如果我理解了该方法的目的,那么我建议进行以下更改:

  • 如果您找到用户/密码匹配,则只需退出方法(返回)
  • 在抛出异常之前迭代数据库中的所有用户。现在,如果您有两个用户并且输入的用户/通行证组合用于第二个用户
  • ,您将失败

这里是样本修改:

public void confirmation(TextField username, PasswordField password) throws NameException {
    data.loadDatabase();
    for (int i = 0; i < data.LoginMembers.size(); i++) {
        if (username.getText().equals(data.LoginMembers.get(i).getUsername())) {
            this.a = true;
            System.out.println("Username right");

            if (password.getText().equals(data.LoginMembers.get(i).getPassword())) {
                this.b = true;
                System.out.println("Password right");
                this.user = data.LoginMembers.get(i).getClass().getSimpleName().toString();
                return;
            }
        }
    }
    System.out.println("Username or password wrong");
    this.a = false;
    throw new NameException();
}

答案 4 :(得分:0)

您可以使用break声明。此外,您可以按标签中断循环。

#controls-wrapper {
width: 100%;
height: 35px;
position: fixed;
bottom: 0;
left: 0;
z-index: 2
}
#controls {
width: 100%;
height: 35px;
position: fixed;
bottom: 0;
left: 0;
background-color: rgba(0,0,0,0.75);
border-top: 2px solid #FFF;
z-index: 2
}

如果condition为true,则两个循环都将终止。