2017-02-07 2 views
1

Мой заголовок немного беден, но вот в чем проблема. Я использую класс Scanner для ввода двух входов, обоих целых чисел. Если он не является целым числом, он сообщает пользователю ввести другой ввод. Это отлично работает для первого целого числа, но во втором целочисленном (и любых последовательных) оно печатает текст дважды.Хотя проверка цикла на целое число в сканере активируется дважды при втором прогоне

Код:

public class Project1 { 
    public static void main(String[] args) { 
     // creates a new scanner 
     Scanner scanner = new Scanner(System.in); 

     // rejects input if the first token is not an integer 
     System.out.println("Enter the first integer:"); 
     while(!scanner.hasNextInt()) { 
      scanner.nextLine(); 
      System.out.println("That's not an integer, please enter again:"); 
     } 
     // stores integer in variable when first token is an integer 
     int num1 = scanner.nextInt(); 

     /* ======== repeats for second integer ======== */ 
     System.out.println("Enter the second integer:"); 
     while(!scanner.hasNextInt()) { 
      scanner.nextLine(); 
      System.out.println("That's not an integer, please enter again:"); 
     } 
     // stores integer in variable when first token is an integer 
     int num2 = scanner.nextInt(); 

     System.out.println(num1 + num2); 
    } 
} 

Вот результат:

"Enter the first integer:" 
>1.2 
"That's not an integer, please enter again:" 
>1 
"Enter the second integer:" 
>2.3 
"That's not an integer, please enter again:" 
"That's not an integer, please enter again:" 
>2 
"3" 

Почему это повторять дважды для второго числа?

ответ

2

Вместо того, чтобы использовать nextLine(), чтобы пропустить линию, используйте next() способ Scanner класс.

Итак, теперь следующий код работает нормально.

import java.util.*; 
public class Project1 { 
    public static void main(String[] args) { 
     // creates a new scanner 
     Scanner scanner = new Scanner(System.in); 

     // rejects input if the first token is not an integer 
     System.out.println("Enter the first integer:"); 
     while(!scanner.hasNextInt()) { 
      // scanner.nextLine(); 
      scanner.next(); 
      System.out.println("That's not an integer, please enter again:"); 
     } 
     // stores integer in variable when first token is an integer 
     int num1 = scanner.nextInt(); 

     /* ======== repeats for second integer ======== */ 
     System.out.println("Enter the second integer:"); 
     while(!scanner.hasNextInt()) { 
      //scanner.nextLine(); 
      scanner.next(); 
      System.out.println("That's not an integer, please enter again:"); 
     } 
     // stores integer in variable when first token is an integer 
     int num2 = scanner.nextInt(); 

     System.out.println(num1 + num2); 
    } 
} 

ВЫВОД

Enter the first integer: 
1.2 
That's not an integer, please enter again: 
2 
Enter the second integer: 
1.3 
That's not an integer, please enter again: 
3 
5 
Смежные вопросы