Поэтому я сделал это очень сложно, чтобы следовать методу некоторое время назад, и я вернулся, чтобы добавить в другой отступы if, чтобы проверить список массивов пользователей, использующих цикл for. Прежде чем я добавил это, метод работал нормально, но теперь я получаю сообщение об ошибке в последнем ключевом слове else. В нем говорится "Синтаксическая ошибка. Удалите этот токен". У меня нет ошибок, когда я удаляю последнее ключевое слово else, но я не уверен, почему, когда у них есть четыре ключевых слова - не должно быть четвертого ключевого слова else? Спасибо за любую помощь.
//method to validate input by user to log in
public void validateInput() {
//presence check on username
if (qi.getEnteredName().length() > 0) {
//compare entered username to stored user accounts
for(int i = 0; i < users.size(); i++) {
if (qi.getEnteredName().equalsIgnoreCase(getUserList().get(i).getUsername())) {
//presence check on password
if (qi.getEnteredPass().length > 0) {
//ensures password is at least 6 char long
if(qi.getEnteredPass().length > 5) {
qi.getMainCards().next(qi.getPanels()); //getPanels() == cardPanel
} else {
JOptionPane.showMessageDialog(null,
"Your password must be at least six characters long.",
"Password Violation", JOptionPane.WARNING_MESSAGE);
}
}else {
JOptionPane.showMessageDialog(null,
"Your did not enter a password.",
"Password Violation", JOptionPane.WARNING_MESSAGE);
}
}
else { JOptionPane.showMessageDialog(null,
"You are not registered.",
"User Violation", JOptionPane.WARNING_MESSAGE);
}
else {
JOptionPane.showMessageDialog(null,
"You did not enter a username. Please try again.",
"Username Violation", JOptionPane.WARNING_MESSAGE);
}
}
}
}
Ну, в основном ваши последние два else
утверждения совпадают с тем же оператором if
который, вероятно, не тот, который вы хотите. Вам придется переместить второй оператор else за другим }
. У вас есть следующее:
else { JOptionPane.showMessageDialog(null,
"You are not registered.",
"User Violation", JOptionPane.WARNING_MESSAGE);
}
else {
JOptionPane.showMessageDialog(null,
"You did not enter a username. Please try again.",
"Username Violation", JOptionPane.WARNING_MESSAGE);
}
}
Но вы действительно этого хотите:
else { JOptionPane.showMessageDialog(null,
"You are not registered.",
"User Violation", JOptionPane.WARNING_MESSAGE);
}
}else {
JOptionPane.showMessageDialog(null,
"You did not enter a username. Please try again.",
"Username Violation", JOptionPane.WARNING_MESSAGE);
}
Вот почему очень важно правильно форматировать ваш код и аккуратно с правильным отступом. В Eclipse (если вы используете это) вы можете выбрать все и нажать ctrl + я (я думаю) или cmnd + я в зависимости от того, используете ли вы компьютер или Mac, и он будет правильно форматировать отступ.
Говоря это, это, вероятно, намного легче сделать, if
, else if
, а else
утверждения, чем то, что вы здесь делаете.
У вас есть else
два утверждения. На верхнем уровне у вас есть, if
, else
и еще else
.
Это должно быть, if
, else if
и конечное условие будет else
. Если вы имеете дело со многими операторами if
, каждый следующий, if
должен быть else if
, потому что else
означает "если все остальное не является истинным".
Вы пропустили правильное место в своем заявлении if, как уже упоминалось в других ответах. Чтобы предотвратить такие досадные ошибки, я бы рекомендовал организовать код более удобочитаемым образом. Для вашего случая это может быть что-то похожее (если я правильно понял логику):
public void validateInput() {
final String name = qi.getEnteredName();
final String password = qi.getEnteredPass();
if (empty(name)) {
showWarn("Username Violation", "You did not enter a username. Please try again.");
} else if (!registered(name)) {
showWarn("Username Violation", "You are not registered.");
} else if (empty(password)) {
showWarn("Password Violation", "Your did not enter a password.");
} else if (password.length < 6) {
showWarn("Password Violation", "Your password must be at least six characters long.");
} else {
// we are good
qi.getMainCards().next(qi.getPanels());
}
}
private boolean registered(String name) {
for(int i = 0; i < users.size(); i++) {
if (name.equalsIgnoreCase(getUserList().get(i).getUsername())) {
return true;
}
}
return false;
}
private void showWarn(String title, String message) {
JOptionPane.showMessageDialog(null,
message,
title, JOptionPane.WARNING_MESSAGE);
}
private boolean empty(String string) {
return string != null && !string.isEmpty();
}