2016-11-03 3 views
4

스캐너와 무한 루프를 사용하여 정수를 얻으려고합니다. 이 문제를 해결할 수있는 해결책을 알고 있지만 첫 번째 접근 방식이 제대로 작동하지 않는 이유가 궁금합니다.예외가 발생할 때까지 Java try and catch

첫 번째 반복에서 작동하지만 화면에 "유효하지 않음, 다시 시도하십시오"라는 메시지가 영원히 계속 표시됩니다. Scanner API doc 가입일

답변

7

:

스캐너가 InputMismatchException을 발생

스캐너는 검색 또는 몇몇 다른 방법을 통해 스킵 될 수 있도록, 예외를 유발 한 토큰을 전달하지 않을 것이다.

그래서 유효하지 않은 토큰은 다른 예외를 일으키는 원인이 여전히 존재하고 서로 다른 ...

Scanner myScanner = new Scanner(System.in); 
int x = 0; 
while(true){ 
    try{ 
     System.out.println("Insert a number: "); 
     x = myScanner.nextInt(); 
     break; 
    }catch(InputMismatchException e){ 
     System.out.println("Invalid, try again."); 
     myScanner.next(); // skip the invalid token 
     // continue; is not required 
    } 
} 
+0

감사합니다! 나는 스캐너에 관한 그 작은 세부 사항을 몰랐다. 현재 작동 중입니다. D –

4

@LukeLee's solution에 대한 대안 :

Scanner myScanner = new Scanner(System.in); 
int x = 0; 
while(true){ 
    try{ 
     System.out.println("Insert a number: "); 
     x = Integer.parseInt(myScanner.next()); 
     break; 
    }catch(NumberFormatException e){ 
     System.out.println("Invalid, try again."); 
     // continue is redundant 
    } 
} 
관련 문제