2017-09-14 4 views
0

나는 프로그래밍에 완전히 새롭고 나는 InputMismatchException을 잡을 때 루프 내 main while 회귀로 돌아갈 수없는 문제에 봉착했다. 나는 Google을 검색했는데 사용자가 제공 한 솔루션을 찾아서 완전히 이해할 수는 없습니다.어떻게 연장 할 ... while 회 돌이 예외 catch 후

내 목표는 사용자가 종료 신청을 할 수있는 문자를 입력 할 가능성을 없애는 것입니다. 그래서 거의 모든 코드를 try/catch로 둘러 쌌다.

나는 내 코드에 더 많은 루프를 넣어 시도하고 모두는 2 가지 방법으로 종료 :

  1. 내 루프는 catch 문에 도달 한 후 완료되지 않았다.
  2. 나는 콘솔로 되돌아 왔고 아무 일도 일어나지 않았다. (나는 여전히 거기에 입력 할 수있다.)

누군가 내 목표에 도달하는 방법을 설명 할 수 있습니까? 나는 또한 hasNextInt가 적절한 값을 입력하도록 다시 요청할 것이라고 기대했지만 시도하지 않았습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 응용 프로그램을 디버깅하고 볼 수있는 것은 코드가 끝날 때까지 프로 시저를 건너 뛰는 것입니다. 이 예외를 얻을 때, 콘솔 나쁜 형식으로 읽이 존재하는 예외 nextInt()을 가지고 있으며, InputMismatchException을 줄 것이다

Scanner scanner = new Scanner(System.in); 

System.out.print("\nChoose mode: "); 

int userInput = 0; 

do { 
    do { 
     try { 
      userInput = scanner.nextInt(); 
      switch (userInput) { 
       case 1: 
        Mode_1.multiplyTwoInteger(); 
        break; 
       case 2: 
        Mode_2.multiplyTwoSpecifiedValues(); 
        break; 
       case 3: 
        System.out.println("\nYou quit application. Goodbye :)"); 
        return; 
       default: 
        System.out.print("Not found! Choose again game mode: "); 
      } 
     } catch (Exception InputMismatchException) { 
      System.out.print("Wrong input!\nChoose again:"); 
     } 
    } while (userInput <= 0 || userInput > 3); 
} while (userInput != 3); 

답변

0

.

스캐너 개체를 catch 블록에 다시 입력 해보십시오. scanner = new Scanner (System.in); 또는 잘못된 입력을 읽을 수 있습니다 scanner.nextLine(). 다음과 같이 일치하도록 코드를 변경

봅니다 :

try { 
        userInput = scanner.nextInt(); 
        switch (userInput) { 
         case 1: 
          Mode_1.multiplyTwoInteger(); 
          break; 
         case 2: 
          Mode_2.multiplyTwoSpecifiedValues(); 
          break; 
         case 3: 
          System.out.println("\nYou quit application. Goodbye :)"); 
          return; 
         default: 
          System.out.print("Not found! Choose again game mode: "); 
        } 
       } catch (Exception InputMismatchException) { 
        scanner=new Scanner(System.in); // Reinitiate the scanner object or use scanner.nextLine() to read bad input. 
        System.out.print("Wrong input!\nChoose again:"); 
       } 
+0

나에게 새로운 지식 즉. 이런 식으로 작동하는지 몰랐습니다. 솔루션 주셔서 대단히 감사합니다. – Ahlen

관련 문제