Продолжайте запрашивать ввод данных пользователем, пока целое число не окажется между двумя числами - PullRequest
0 голосов
/ 06 марта 2020

Мне нужна помощь со следующим кодом:

    int seatNum = 0;

    Scanner seatNumber = new Scanner(System.in);

    do
    {
        try 
        {
            System.out.println("Please choose a seat number");
            seatNum = seatNumber.nextInt();  
        } 
        catch(InputMismatchException e) 
        {
            System.out.println("The index you have entered is invalid");
            System.out.println("Please enter an index number between 0 and 7");

        }

    } while (seatNum <= 0 || seatNum >= 7);

По сути, все, что я хочу, это чтобы seatNum был в диапазоне от 0 до 7, если не попросить пользователя ввести снова. Когда я ввожу целое число, которое не находится между 0 и 7, все работает правильно, но если я ввожу строку, программа переходит в бесконечное число l oop. Как остановить программу перехода в бесконечное число l oop, когда пользователь вводит строку?

Ответы [ 3 ]

1 голос
/ 06 марта 2020
    int seatNum = 0;
    Scanner seatNumber = new Scanner(System.in);
    do {
        try {
            System.out.println("Please choose a seat number");
            seatNum = seatNumber.nextInt();
        }
        catch(InputMismatchException e) {
            System.out.println("The index you have entered is invalid");
            System.out.println("Please enter an index number between 0 and 7");
            seatNumber.nextLine();
        }
    } while ( (seatNum <= 0 || seatNum >= 7) );

добавить seatNumber.nextLine(); в блоке catch. Эта команда перемещает сканер на следующую строку (при чтении из файла или строки это просто читает следующую строку), таким образом, по сути, сбрасывая его, в этом случае. Он очищает буфер и готовит сканер для нового ввода.

0 голосов
/ 06 марта 2020

Вы можете изменить это так:

        int seatNum = 0;
        Scanner seatNumber = new Scanner(System.in);
        do
        {
            try
            {
                System.out.println("Please choose a seat number");
                try{
                    seatNum = Integer.parseInt(seatNumber.next());
                }catch (Exception ignored){}
            }
            catch(InputMismatchException e)
            {
                System.out.println("The index you have entered is invalid");
                System.out.println("Please enter an index number between 0 and 7");

            }

        } while (seatNum <= 0 || seatNum >= 7);

0 голосов
/ 06 марта 2020

Попробуйте это

String seatNum = null;
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println(" Enter a number between 0 and 7"); 
seatNum = scanner.nextLine().toString();
if(seatNum.matches("[0-7]")) break; // makes sure user enter a number also between the range
else System.out.println("Enter between 0 and 7");

Хорошо, верно? я не запускаю его, скажите, если это то, что вы хотите

...