2017-12-18 2 views
0

왜 내 코드에서 오류가 발생합니까? 사용자가 잘못된 번호를 입력하면 코드에서 새로운 유효한 번호를 입력해야합니까? 좋아하는 것을 새로운 가치로 바꿀 수없는 것처럼 보입니다. 이 문제를 어떻게 해결할 수 있습니까?스캐너 java.util.InputMismatchException에서 Catch 문 결과를 시도하십시오.

package RobB; 

import java.util.Scanner; 

public class FavoriteNum { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int[] num = new int[10]; 
     int favorite = 0; 

     System.out.print("Enter your favorite number: "); 
     try { 
      favorite = scan.nextInt(); 
     } 
     catch (Exception e) { 
      System.out.println("Enter an integer!"); 
      System.out.print("Enter your favorite number: "); 

      favorite = scan.nextInt(); 
     } 

     for (int i = 0; i < 10; i++) { 
      System.out.print("Enter a random number (" + Math.abs(((i + 1) - 10)) + " to go): "); 
      num[i] = scan.nextInt(); 
     } 
    } 
} 

콘솔 출력 : catch 절에 입력

Enter your favorite number: 11.1 

Enter an integer! 

Exception in thread "main" Enter your favorite number: java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at RobB.FavoriteNum.main(FavoriteNum.java:21) 
+0

_Scan_는 ??? – vinS

+1

이것은 사양입니다. 추가 한 추가 검사를 받아야하고 유효한 입력을 얻을 때까지 루프를 추가해야합니다. – ronhash

답변

0

스캔하지 좋은 생각이 될 것으로 보인다. do-while 루프를 사용하는 것이 좋습니다.이 루프를 종료 할 수있는 조건은 boolean 플래그 일 수 있습니다.이 플래그는 유효한 Integer이 최종적으로 입력되었음을 확인하면 상태가 변경됩니다. 또한 ScannerhasNextInt() 메서드를 사용하여 올바른 입력이 제공되었는지 확인하고, 실제로 필요하지 않은 경우 예외를 throw하지 않을 수도 있습니다.

boolean validInput = false; 
do { 
    try { 
     System.out.print("Enter your favourite number: "); 
     favorite = scan.nextInt(); 
     validInput = true; } 
    catch (Exception e) { 
     System.out.println("Enter an integer!"); } 
} while (!validInput) 

편집 : 여기에 약간의 ronhash의 대답의 변화,하지만 do-while 루프를 사용하고 이전이 inneficient와 잘못 때문에 나는 코드를 편집했다.

+0

감사합니다. ^^^ –

+0

의 답변을 찾았다면 도움이 될만한 답변을 찾을 수 있습니다. 질문에 대답이 포함되어 있다고 생각되면 왼쪽에있는 대답을 수락 할 수 있습니다. –

1

이 while 루프와 대안이다 catch에서

boolean validInput = false; 
while (!validInput) { 
    try { 
     System.out.print("Enter your favourite number: "); 
     favorite = scan.nextInt(); 
     validInput = true; 
    } 
    catch (Exception e) { 
     System.out.println("Enter an integer!"); 
    } 
} 
+1

도움을 주셔서 감사합니다! –

+0

문제 없음 ... 도와 드리겠습니다. 답변을 수락 할 수도 있습니다. :) – ronhash

관련 문제