Попробуйте ... Catch не перехватывает Exception и все равно выдает ошибку времени выполнения - PullRequest
0 голосов
/ 28 апреля 2019

Я делаю простой проект, где пользовательский ввод должен быть удвоен.Однако профессор хочет, чтобы код был идиотским доказательством.Итак, я настроил функцию catch для отлова исключений, которые появляются, когда идиот вводит что-то, кроме двойного, который не подходит.Тем не менее, я все еще получаю исключения во время выполнения при вводе строки.Пожалуйста, помогите!

Я пробовал только блок Try ... Catch, есть ли способ исправить блок или есть другой способ сделать это?

try{
reapHeight = scanner.nextDouble();
} catch (Exception e){
    System.out.println("Error : Invalid Input");
    System.out.print("Please try again : ");
    reapHeight = scanner.nextDouble();
}

Я хочу

Ошибка: неверный ввод. Попробуйте еще раз:

Чтобы отобразиться, но возникает только исключение времени выполнения типа InputMismatchException.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

но возникает только исключение времени выполнения типа InputMismatchException

, поскольку nextDouble() в блоке try не использует полный пользовательский ввод, включая символ новой строки, поэтому в блоке catch 2-й nextDouble() выдает ошибку, которая не обнаружена.
Чтобы избежать этого, вы должны использовать nextLine() после каждого звонка на nextDouble().
В любом случае, ваша логика неверна, потому что вы должны использовать цикл, чтобы получить пользовательский ввод, подобный этому:

Scanner scanner = new Scanner(System.in);
double reapHeight;
boolean valid = false;
do {
    try {
        reapHeight = scanner.nextDouble();
        scanner.nextLine();
        valid = true;
    } catch (Exception e) {
        System.out.println("Error : Invalid Input");
        System.out.print("Please try again : ");
        scanner.nextLine();
    }
} while (!valid);
0 голосов
/ 28 апреля 2019

Вам нужно использовать Scanner.nextLine() после каждого Scanner.nextDouble(), и вам нужно удалить Scanner.nextDouble() из вашего блока catch:

Scanner in = new Scanner(System.in);
double reapHeight;
System.out.print("Enter a double: ");
while(true){
    try{
        reapHeight = in.nextDouble();
        break;
    }
    catch(InputMismatchException e){
        System.out.println("Error : Invalid Input");
        System.out.print("Please try again : ");
    }
    finally{
        in.nextLine();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...