У меня есть цикл for
, который используется для сравнения данных для входа пользователя для запуска следующего экрана приложения.Как выполнить блок else только один раз в цикле for
Если введенные пользователем поля успешно совпадают с данными в ArrayList
, возвращаемом из базы данных, программа запускает следующий экран - если они не совпадают, сообщение об ошибке выводится пользователю с использованием JOptionPane
.
Моя проблема - выводится сообщение об ошибке для каждой итерации цикла for
, но я хочу, чтобы сообщение отображалось только один раз.
//if name or password are NOT left blank proceed with the check otherwise output error message in the text area
if (!name.equals("") && !password.equals("")) {
for (int i = 0; i < passwords.size(); i++) {
if (name.equals(userNames.get(i)) && (password.equals(passwords.get(i)))) {
myHomeGUI.setVisible(true);
break;
} else {
JOptionPane.showMessageDialog(null,"Sorry, no user recognized with those credentials\nPlease try again");
}
}//end for loop
} else {
JOptionPane.showMessageDialog(null,"Sorry, no fields can be left blank");
}//end
Итак, добавьте оператор break после сообщения; – OldProgrammer
попробовал это, если у меня есть оператор break после сообщения в другом, что он не будет работать. Например, если 3-я позиция моего arraylist для userNames - это david, и пользователь вводит john, который не находится в списке массивов, он вырвется из цикла и никогда не достигнет давида и поэтому никогда не будет оценивать значение True – RoRo88
. Я бы подумал об изменении имени пользователя/паролей. Почему у вас есть два списка? не было бы лучше иметь (например) карту (Hash) с именем пользователя/паролем в ней? Тогда вам не нужно проходить через петлю. просто сравните пароль с map.get (username) –
griFlo