2010-01-27 3 views
2

그래서 내 스캐너가 기대 필수 입력되면 이중 입력 사용자의 가능한 예외를 처리하는 것을 시도하고있다 :Java에서 .nextInt()를 사용할 때 우발적 인 double 입력을 처리하는 방법은 무엇입니까?

boolean go = true; 
do { 
     System.out.print("Please enter one grade from 0 - 100. To end input, enter a   
     negative integral value.\n"); 
    try { 
      int myInt = scanner.nextInt(); 
      . 
      . 
      . 
    } 
    catch (InputMismatchException e) { 
      System.out.println("Oops!! Please enter only integral numbers"); 
    } 
while (go); 

이 숫자가 아닌 입력 작업 (예 : 편지)가 아닌 경우 I 3.14 또는 -와 같은 다른 ASCII 기호를 입력하십시오. 이 경우 프로그램을 죽일 때까지 아래 줄이 반복됩니다.

Please enter one grade from 0 - 100. To end input, enter a negative integral value. 
Oops!! Please enter only integral numbers. 

아이디어가 있으십니까? : D

대답 : 나는 (A System.in의 InputStream 사용) 위의 게시 된 코드를 시도 System.in, 및 자바 6

+1

"내 코드가 폭발합니다"보다 좀 더 정확하게 표현할 수 있습니까? –

+1

"폭발"이란 무엇을 의미합니까? 또 다른 예외가 있습니까? – Dmitry

+0

사용자가'scanner.nextInt();'에'double'을 입력하면'InputMismatchException'이 실제로 throw됩니다. 코드에서 다른 작업을 수행하지 않습니까? 그렇지 않다면, 읽혀지는 값은 무엇입니까? 입력 된 double의 반올림 된 버전입니까? – bguiz

답변

4

내 생각 엔 당신이 폭발을 말할 때, 당신은 당신이

Oops!! Please enter only integral numbers 

의 무한 루프를 받고 있다는 것을 의미하는 대신 다음을 수행하십시오 내 초기 추측은 맞았 어 ;-)

이 문제가 발생하는 이유는 nextInt()가 실패 할 때 내부 포인터가 이동되지 않고 그래서 당신이 다시 nextInt 할 수있을 때마다, 그것은 같은 토큰에서 실패합니다. 그래서, 먼저 토큰을 지워야합니다. 잘못된 입력 인 텍스트를 인쇄하여 수행하고 있습니다. 그런 다음 새 토큰을 입력 스트림에서 읽습니다.

+1

+1 : 토큰 포인터가 이동하지 않습니다. – bguiz

2

를 사용하고, 예상대로 두 배는 InputMismatchException 원인이됩니다. 어떤 입력 방법을 사용하고 있으며 어떤 Java 버전입니까?

try { 
    int myInt = scanner.nextInt(); 
    // … 
} 
catch (InputMismatchException e) { 
    System.out.println("Oops!! Please enter only integral numbers"); 
    System.out.println(scanner.next() + " was not valid input."); 
} 

편집 : 나는 것을 볼 수