2014-09-07 3 views
0

오후, 내 실수 일 수도 있고 아닐 수도있는 스캐너 클래스에 이상한 문제가 있습니다. 사용자에 대한 접두어 및 오류 검사를 표시하는 스캐너와 같은 클래스를 만들었습니다. 입력이 InputMismatchError를 throw하면 코드는 다음 시도에서 스캐너 행으로 이동하고 입력을 묻지 않습니다. 단지 불일치 오류를 던지고 사용자 입력을 기다리지 않고 계속됩니다.스캐너가 루프에서 처음으로 불일치가있는 경우 입력을 찾고 있지 않습니다.

public int readInt(String prefixString, int lowLimit, int highLimit) 
{ 
    int number = 0; 
    boolean validResponse=true; 
    System.out.print(prefixString + ": "); 
    do 
    { 
     try 
     { 
      number = scanner.nextInt();//this is what is causing the issue 
      if(number<lowLimit || number>highLimit) 
      { 
       System.out.print(number + " is outside of the limits of " + lowLimit + "-" + highLimit + "\nPlease retry: "); 
       validResponse=false; 
      } 
      else 
      { 
       validResponse=true; 
      } 
     } 
     catch(InputMismatchException e) 
     { 
      System.out.print("The phrase entered is not a valid number." + "\n" + prefixString + ": "); 
      validResponse = false; 
     } 

    } while (!validResponse); 
    return number; 
} 

왜 이런 일이 발생했는지에 대한 아이디어가 있습니까? 감사!

동일한 문제가있는 레거시 및 기타 편집 : 아래 해결책은 부분적으로 만 문제를 해결했습니다. 여전히 발생하지만 빈번하지는 않습니다. 이 문제가없는 BufferedReader 클래스로 전환했습니다.

catch(InputMismatchException e) 
    { 
     System.out.print("The phrase entered is not a valid number." + "\n" + prefixString + ": "); 
     validResponse = false; 
     scanner.next(); 
    } 

토큰은 기본 공백으로 두 개의 구분 기호 사이의 것입니다 : 입력의 앞 숫자가 아닌 경우

답변

0

당신은 하나의 토큰을 건너 뛸 수 있습니다. 자세한 내용 및 변경 방법은 스캐너 클래스의 설명서를 참조하십시오 (useDelimiter).

+0

필자는 스캐너의 동작에 너무 익숙하지 않다. 오랫동안 이와 비슷한 클래스를 사용했기 때문에 불일치로 인해 충돌 할 수 있기 때문에 직접 만들겠다고 결정했다. –

+0

그걸 수정 한 것 같습니다. 고맙습니다! –

+0

도움이 되니 기쁩니다. 부수적으로, 예외가 마음에 들지 않으면'nextInt'를 호출하기 전에'hasNextInt' 메소드를 사용할 수 있습니다. – Yogu

관련 문제