2013-10-07 3 views
0

Программа должна получать четыре целых числа в одном входе от пользователя (например, 1 2 3 42). Я пытаюсь написать некоторый код, чтобы проверить, не является ли вход целыми.Как проверить, является ли единственная строка ввода только целыми числами?

Однако, даже если ввод является чем-то вроде 1 2 a b, он не входит в цикл while, и я не могу понять, почему. любая помощь будет оценена по достоинству.

Scanner scan = new Scanner(System.in);  
System.out.print("Please list at least one and up to 10 integers: "); 
scan.hasNextInt(); 

    while(!scan.hasNextInt()) 
     { 
      System.out.println("One or more of your inputs was not an integer. Please input only integers: "); 
      scan.next(); 
     } 
+0

Я настоятельно рекомендую вам пройти через это с помощью отладчика. Вы сразу увидите, какова ваша ошибка. –

ответ

1

вы не прогрессирует, прочитав следующий int с Scanner.

Попробуйте с входным 1 a b, используя следующий код:

scan.hasNextInt(); 
scan.nextInt(); // or scan.next() to read next integer 
    while(!scan.hasNextInt()) 
     { 
      System.out.println("One or more of your inputs was not an integer. Please input only integers: "); 
      scan.next(); 
     } 

Это будет печатать:

Один или несколько входов не является целым числом. Пожалуйста, введите только целые числа:

только целые числа: один или несколько ваших входов не были целыми числами. Пожалуйста, введите

+0

, который действительно помогает, но я не понимаю, почему println выполняет итерацию дважды, прежде чем пользователь сможет ввести снова, почему? –

+0

после первого чтения, следующий токен - это 'a', который не является целым числом, а условие цикла while while является« истинным », поэтому напечатайте первую строку, а затем выполните« scan.next() ». Теперь для второй итерации он видит 'b', который не является целочисленным, а условие' while' снова истинно. поэтому он заходит внутрь, снова печатает и пытается прочитать 'next()'. Но читать нечего. – Sage

Смежные вопросы