Как избежать бесконечного цикла при тестировании, если входное целое - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь разрешить только целочисленный ввод и не допустить прерывания моей программы при вводе чего-то еще. Каким-то образом мой код создает бесконечный цикл и не позволяет мне вводить новый ввод.

    private static int x;

    public static void main(String[] args) {
        testInput();
    }

    public static void testInput(){
        while (true){
            System.out.println("Please enter Integer:");
            try{
                setX(scanner.nextInt());
                break;
            }catch (InputMismatchException i){
                System.out.println("Please use Integer");
            }
        }
    }

    public static void setX(int integer){
        x = integer;
    }
}

Создает бесконечный цикл, который говорит: Пожалуйста, введите Integer:, Пожалуйста, используйте Integer вместо того, чтобы позволить мне сделать новый ввод.

1 Ответ

2 голосов
/ 20 июня 2019

Вы на правильном пути с циклом while, в основном вам просто нужно использовать scanner.next(), когда пользователь вводит что-то отличное от целого числа:

import java.util.Scanner;

class Main {

  public static void main(String[] args) {
    int userInteger = getIntegerInput();
    System.out.println("You entered: " + userInteger);
  }

  private static int getIntegerInput() {
    Scanner scanner = new Scanner(System.in);
    String prompt = "Please enter an integer: ";
    int validInteger = -1;

    System.out.print(prompt);
    while (scanner.hasNext()) {
      if (scanner.hasNextInt()) {
        validInteger = scanner.nextInt();
        scanner.close();
        break;
      } else {
        System.out.println("Error: Invalid input");
        System.out.print(prompt);
        scanner.next();
      }
    }

    return validInteger;
  }

}

Пример использования:

Please enter an integer: a
Error: Invalid input
Please enter an integer: ?
Error: Invalid input
Please enter an integer: 1.0
Error: Invalid input.
Please enter an integer: 6
You entered: 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...