【问题标题】:Stoping a for loop in java while looping through an Arraylist?java - 在遍历Arraylist时停止Java中的for循环?
【发布时间】:2015-05-13 14:34:48
【问题描述】:

我正在为一个学校项目的登录系​​统编写验证的一部分。 我正在尝试遍历包含成员的 ArrayList。它只适用于 ArrayList 中的一个对象,但只要有多个 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();
        }
    }
}

【问题讨论】:

  • 你的意思是你得到了无限循环?
  • 如果您使用 for-each 循环,这将更具可读性

标签: java for-loop arraylist


【解决方案1】:

如果我理解正确,一旦你验证了用户密码,你想退出循环然后添加一个这样的中断:

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();
    }


}

}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      break;
      

      【讨论】:

        【解决方案4】:

        您可以使用break 语句。另外,还可以按标签打断循环。

        search:
            for (i = 0; i < array.length; i++) {
                for (j = 0; j < array[i].length; j++) {
                    if (array[i][j] == searchfor) {
                        break search;
                    }
                }
            }
        

        如果条件为真,则两个循环都将终止。

        【讨论】:

          【解决方案5】:

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

          • 如果您发现用户/密码匹配,则退出方法(返回)
          • 在引发异常之前遍历数据库中的所有用户。现在,如果您有两个用户并且输入的用户/通行证组合是第二个用户,那么您将失败

          这里是示例修改:

          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();
          }
          

          【讨论】:

          • 这正是我一直在争取的!无论如何我可以让你详细说明你的两个变化吗?我是个初学者。
          猜你喜欢
          • 2013-04-05
          • 2014-03-22
          • 1970-01-01
          • 1970-01-01
          • 2013-12-26
          • 2012-09-02
          • 1970-01-01
          • 2020-06-15
          • 1970-01-01
          相关资源
          最近更新 更多