Java: получение значения пользовательского ввода, вызвавшего исключение

Я пытаюсь поймать исключение InputMismatchException со сканером, ожидающим удвоение, и если входное значение равно "c" или "q", я хочу выполнить какой-то определенный код в блоке catch. Мне интересно, есть ли способ получить значение пользовательского ввода после исключения. Так, например, если код вызывает двойное число, и пользователь вводит букву "с", я хочу иметь возможность узнать, что конкретно был введен "с", и сделать что-то, если оно истинно. Вот код, который я пытаюсь написать, где "getValue()" - это имя метода, чтобы описать, что я пытаюсь выполнить:

double value = 0.0;

try{
    System.out.print("\nEnter a number: ");
    value = input.nextDouble();
}
catch(InputMismatchException notADouble){
    if(notADouble.getValue().equalsIgnoreCase("c")){
        //run the specific code for "c"
    }
    else if(notADouble.getValue().equalsIgnoreCase("q")){
        //run the specific code for "q"
    }
    else{
        System.out.print("\nInvalid Input");
    }
}

Спасибо заранее за ваш вклад:)

2 ответа

Решение

Использование Scanner.hasNextDouble() проверить ввод перед тем, как Сканер попытается преобразовать его в число. Примерно так должно работать:

  double value = 0.0;

  Scanner input = new Scanner(System.in);

     System.out.print("\nEnter a number: ");
     while(input.hasNext())
     {
        while(input.hasNextDouble())
        {
           value = input.nextDouble();
        }

        String next = input.next();

        if("c".equals(next))
        {
           //do something
        }
        else if("q".equals(next))
        {
           //do something
        }
        else
        {
           System.out.print("\nInvalid Input");
           //return or throw exception

        }
     }

Вы должны прочитать входные данные как строку, а затем выполнить преобразование.

Другие вопросы по тегам