JavaFX работает, но код try-catch-finally не работает - PullRequest
0 голосов
/ 17 апреля 2019

Я только начал свой урок об обработке исключений, и я не уверен в том, что я сделал неправильно в своем коде - я собираюсь создать пользовательский интерфейс, который спрашивает пользователя, сколько у него домашних животных, и проверяет если ввод является целым числом. Кто-нибудь может указать, что не так?

Я уже пытался использовать label.setText () для своего сообщения, и я также изменил используемое исключение (я попробовал NumberFormat).

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

String value = input.getText();                                  
int intval = 0;
intval = Integer.parseInt(value);
try {
    if (0 >= intval) {
        throw new IllegalArgumentException();
    }
    else 
        throw new InputMismatchException();
}

catch(IllegalArgumentException e)
{
    String outputMessage = "The number must be an integer no less than 0!";
    label1.setText(outputMessage);
}

catch(InputMismatchException i) {
    System.out.println("Please enter an integer.");
    System.out.println("You entered: " + intval);
}

finally
{ 
    System.out.println("You own " + intval + " pets.");
}

Исключения, которые я хочу включить, - это если пользователь ввел другой тип числа вместо целого числа, и если пользователь ввел отрицательное целое число вместо положительного или 0. Мой код выполняется, но блок try-catch не ' это действительно работает.

1 Ответ

1 голос
/ 17 апреля 2019

Похоже, в этом коде много дефектов!Прежде всего, вы не должны были принимать ввод как String, если бы вы взяли ввод как целое число, вы могли бы вызвать исключение InputMismatchException, с помощью которого вы могли бы легко сказать пользователю «введите только целочисленное значение», приняв input какСтрока вы не сможете этого сделать.Не используйте блок finally, потому что независимо от того, сколько исключений выдает ваш код, блок finally будет выполнен.Даже если вы наконец-то ввели -1 (во время выполнения кода), он покажет сообщение «у вас -1 питомец:», так как в конце концов блок будет выполнен независимо от того, что произойдет!Я реорганизовал код, чтобы он работал так же

Scanner input = new Scanner(System.in);

        boolean exceptionHit = false;

        int value = 0;

        try {
            value = input.nextInt();
            if (value <= 0) {
                throw new IllegalArgumentException();
            }
        }
        catch (IllegalArgumentException e) {
            String outputMessage = "The number must be an integer no less than 0!";
            label1.setText(outputMessage);
            exceptionHit = true;

        } catch (InputMismatchException i) {
            System.out.println("Please enter an integer.");
            exceptionHit = true;
        }
        if (exceptionHit == false)
        System.out.println("You have " + value + " pets");

Я удалил блок finally, чтобы последнее сообщение не отображалось каждый раз!Вместо этого я добавил логическое значение, которое будет установлено в true, если будет выполнено какое-либо исключение.

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