Смущает несколько операторов if с отступом в Java

1

Поэтому я сделал это очень сложно, чтобы следовать методу некоторое время назад, и я вернулся, чтобы добавить в другой отступы 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);
            }
        }
    }

}
  • 2
    Вы видите, для чего нужно хорошее качество кода? ° _ °
  • 2
    Я бы реорганизовал этот метод прямо сейчас.
Показать ещё 1 комментарий
Теги:
if-statement

3 ответа

4

Ну, в основном ваши последние два 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 утверждения, чем то, что вы здесь делаете.

2

У вас есть else два утверждения. На верхнем уровне у вас есть, if, else и еще else.

Это должно быть, if, else if и конечное условие будет else. Если вы имеете дело со многими операторами if, каждый следующий, if должен быть else if, потому что else означает "если все остальное не является истинным".

0

Вы пропустили правильное место в своем заявлении 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();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню