2015-05-13 3 views
-1

Я нахожу часть проверки для системы входа в систему для школьного проекта. Я пытаюсь пройти через ArrayList, содержащий членов. Он работает только с одним объектом в массиве ArrayList, но как только будет запущено несколько циклов, цикл будет продолжаться.Остановка цикла for в java во время цикла через Arraylist?

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

Вы имеете в виду, что получаете бесконечную петлю? – bmscomp

+0

Это было бы гораздо более читаемым, если бы вы использовали цикл for-each – Floegipoky

ответ

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


} 

}

+0

Это была оригинальная проблема, спасибо alot –

0

Вы можете использовать break;, чтобы остановить любой цикл

0

В блоке кода, где пароль правильно (или везде, где вам это нужно), вы можете добавить строку:

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

Это именно то, с чем я сражался! есть все равно, я могу заставить вас подробно остановиться на ваших двух изменениях? Я довольно новичок. –

0

Вы можете использовать break заявление. Кроме того, вы можете разбить петли по метке.

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

Если условие истинно, обе петли будут прекращены.

Смежные вопросы