Не принимает ввод внутри блока finally - PullRequest
0 голосов
/ 06 августа 2020
public static void main(String[] args) {
    // TODO Auto-generated method stub
    char c;
    do {    
        Scanner s=new Scanner(System.in);
        try {
            int size=s.nextInt();
            int[] arr=new int[size];
                
            for(int i=0;i<size;i++) {
                arr[i]=s.nextInt();
            }
                
            bubblesort(arr);
                
            for(int i=0;i<arr.length;i++) {
                System.out.print(arr[i]+" ");
            }
            System.out.println();
                
        } catch(Exception e) {
            System.out.println("Invalid Input");
        } finally {
            System.out.println("Want to repeat(y/n)");
            System.out.println(s);
            c=s.next().charAt(0);
        }
    } while(c=='y' || c=='Y');
}

Когда я даю действительный ввод, то после выполнения сортировки он также принимает входной символ c внутри блока finally, но когда я даю недопустимый ввод, то после перехода к блоку catch он только печатает вывод внутри блока finally, но не Не принимает вводимый символ c. Почему так происходит?

1 Ответ

3 голосов
/ 06 августа 2020

Вероятно, это происходит потому, что ваш сканер не продвигается после получения недопустимого ввода. Согласно официальной документации Scanner :

public int nextInt(int radix) 

Сканирует следующий токен ввода как int. Этот метод вызовет исключение InputMismatchException, если следующий токен не может быть преобразован в допустимое значение типа int, как описано ниже. Если перевод успешен, сканер продвигается мимо совпадающего ввода.

А также:

Когда сканер выдает исключение InputMismatchException, сканер не передает токен это вызвало исключение, поэтому его можно получить или пропустить каким-либо другим методом.

Следовательно, ваш сканер никогда go не пройдет nextInt и не достигнет выполнения next()

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