Не выбрасывайте IllegalArgument Exception при отмене диалогового окна - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над игрой со ставками, которая не позволяет пользователю вводить отрицательные числа или число, превышающее их баланс: code:

    int bet = 0;
    boolean cont = true;
    int userBalance = 100; // Keeps receiving input until an integer is entered.
    do {
        try {
            bet = Integer.parseInt(JOptionPane.showInputDialog("Please enter a bet: "));
            // Not allowing user to enter negative number
            if (bet < 0) {
                throw new IllegalArgumentException("");
            }
            if (bet > userBalance) {
                throw new BetTooHighException();
            }
            // Breaks loop if nothing is thrown
            cont = false;
            // Catching negative numbers } catch (IllegalArgumentException ilArgException) {
            JOptionPane.showMessageDialog(null, "bet must be a positive integer!");
        } catch (BetTooHighException betTooHigh) {
            JOptionPane.showMessageDialog(null, "You cannot bet more than you have.");
        }
    } while (cont);

    System.out.println(bet);

Однако этот код работает почти нормально, если янажмите кнопку «Отмена» в диалоговом окне, ничего не вводя, создается недопустимое значение falseArgumentException, поскольку ставка установлена ​​на 0. Как я могу обойти это, сохранив функциональность?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы можете использовать 0 в качестве значения по умолчанию при создании диалогового окна ввода следующим образом:

JOptionPane.showInputDialog("Please enter a bet: ", 0)

Однако даже при значении по умолчанию этот метод вернет ноль, если пользователь нажмет кнопку отмены,Итак, Integer.parseInt() бросит IllegalArgumentException.

Так что вы можете сделать

ret = JOptionPane.showInputDialog("Please enter a bet: ", 0)
if (ret == null) {
    cont = false; 
} else {
    bet = Integer.parseInt(ret);
    // rest of your logic
}
0 голосов
/ 28 сентября 2018

Вы пытаетесь проанализировать реакцию, которую вы получаете от inputDialog к Integer, который вызывает IllegalArgumentException

Извлечение

JOptionPane.showInputDialog("Please enter a bet: ")

в объект, который вы можете проверить, находится ли онноль или нет.Если это не так, продолжайте процесс ставок.

Я не знаю точного значения возврата отмененного JOptionPane.showInputDialog, но, вероятно, оно равно нулю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...