Java: программа завершает работу после перехвата InputMismatchException - PullRequest
0 голосов
/ 12 июня 2018

У меня есть класс Player, который содержит функцию, которая принимает целое число в качестве параметра.В моей основной функции, которая находится в другом классе под названием Game, у меня есть раздел, который принимает пользовательский ввод и передает его в функцию DoMove (int i) класса Player.В моем классе Game у меня есть это:

    public static void main(String[] args)
    {
        Player p1 = new Player();
        Scanner input = new Scanner(System.in);
        int entry;
        while(GameNotOver() == true)
        {

            do{
                try
                {
                    p1.DoMove(entry);

                } catch (InputMismatchException e)
                {
                    System.out.println("Bad choice!");
                    input.next();
                }
            } while (p1.DoMove(entry) == false);
       }
    }

По сути, основная функция передает параметр в другую функцию классов, которая прекрасно работает.Но этот параметр должен быть целым числом.Если я наберу кучу символов и нажму Enter, я получу следующее:

Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:864)
        at java.util.Scanner.next(Scanner.java:1485)
        at java.util.Scanner.nextInt(Scanner.java:2117)
        at java.util.Scanner.nextInt(Scanner.java:2076)

Основной цикл GameNotOver работает нормально, и вся программа работает отлично, если я опускаю всю обработку исключений.И программа выходит.Я думаю, что не правильно ловлю исключение.Любые советы?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Ваше исключение выдается из:

p1.DoMove(entry)

, а затем сразу после обработки исключения вы делаете то же самое действие:

} while (p1.DoMove(entry) == false)

Должен ли DoMove (запись) действовать по-другомукогда он вызывается снова с тем же вводом?

0 голосов
/ 12 июня 2018

Вы должны опубликовать свой метод DoMove, так как этот фрагмент кода не может выдать ошибку, с которой вы столкнулись.Кроме того, вы не должны вызывать input.next внутри блока catch, так как это не имеет смысла.Если во входе есть ошибка, очевидно, вы не хотите пытаться прочитать ее, так как это неверная запись.

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