Попробуйте и поймать на массив массива не работает, как expceted - PullRequest
0 голосов
/ 26 февраля 2019

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

Любая помощь приветствуется.Я новичок в Java и программировании.Спасибо, что нашли время, чтобы прочитать мой вопрос.

 public void inputCheck(int[] checkUserInput) {
            try {
                if (!(checkUserInput[1] <= 10 && checkUserInput[1] % 2 == 0)) {

                    errorMessage = "failEven";
                } else if (checkUserInput[0] < 20 || checkUserInput[0] > 80) {

                    errorMessage = "failRange";

                } else if ((checkUserInput[0] >= 20 || checkUserInput[0] <= 80)
                        && (checkUserInput[1] <= 10 && checkUserInput[1] % 2 == 0)) {
                    errorMessage = "checkpassed";
                }

            } catch (NumberFormatException e){
                System.out.println("Please enter an number");
            }

        }

Сообщение об ошибке

 Exception in thread "main" java.lang.NumberFormatException: For input string: "e"
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at UserInput.promptUser(UserInput.java:27)
        at MainClass.main(MainClass.java:11)
    #

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Блок catch, обрабатывающий определенный тип исключения, выполняется только тогда, когда код в блоке try создает исключение этого типа.Таким образом, ваш код в catch может быть выполнен, только если код в блоке try выдает NumberFormatException, но это не так.Вы должны явно выбросить такое исключение в блоке try или вызвать метод, который мог бы его выбросить.

  try {

    if (someCondition) {
       throw new NumberFormatException();
    }

  } catch (NumberFormatException exp) {
      System.out.println("Invalid format" + e.getMessage());
  } 
0 голосов
/ 28 февраля 2019

Здесь нет необходимости в блоке try и catch.Также параметром является массив int, вы не можете передать строку для параметра.Вы можете использовать ниже, второе значение ASCII будет рассматриваться.

int arr[] = {100,'e'};
0 голосов
/ 26 февраля 2019

Ваш код не генерирует исключений любого типа, поэтому блок catch не выполняется вообще.

Проще говоря, ваш код в блоке try не содержит ошибок времени выполнения любого типа, поэтому ваш блок catchне достигается вообще.Блок Catch выполняется только тогда, когда ваш код в блоке try вызывает исключение.

...