2014-03-29 2 views
0

사용자 입력이 int 유형이어야합니다. 사용자가 int 대신 문자를 입력하면 문제가 발생합니다. 예외를 처리하는 방법을 알고 있지만 사용자가 실수를 한 곳에서 스캐너를 반환하고 싶습니다. 어떻게해야합니까? 무한 루프로 이미 시도했지만 작동하지 않습니다.사용자 오류 후 스캐너 판독기 백 - Java

try{ 
    System.out.print("enter number: "); 
    value = scanner.nextInt(); 
}catch(InputMismatchException e){ 
    System.err.println("enter a number!"); 
} 
+0

루프를 사용하여 시도해 볼 수 있습니까? – PakkuDon

답변

2

다른 답변을 통해 올바른 논리를 사용하는 동안 기본 논리의 일부로 예외를 사용하지 않아야합니다. 대신 hasNextIntScanner에서 사용하여 사용자가 정수를 전달했는지 확인할 수 있습니다.

System.out.print("enter number: "); 
while (!scanner.hasNextInt()) { 
    scanner.nextLine();// consume incorrect values from entire line 
    //or 
    //tastiera.next(); //consume only one invalid token 
    System.out.print("enter number!: "); 
} 
// here we are sure that user passed integer 
int value = scanner.nextInt(); 
+0

예! 이게 내가 찾고 있었던거야, 고마워! – user3344186

2

루프가 올바른 생각입니다. 성공을 표시하고 계속 수행하면됩니다.

+0

catch 블록에'tastiera.nextLine();을 추가해야한다고 생각합니다. 왜냐하면'Scanner '가 예외를 던지면 아무 것도 읽지 않기 때문입니다. 따라서 사용자가 잘못된 행을 입력하면 루프가 결코 끝나지 않습니다 – locoyou

+0

@locoyou 좋은 캐치, 고마워요. 결정된. – Mureinik