2011-06-11 4 views
1

나는 대답을 찾으려고하지만 어쩌면 무엇을 묻는 지 이상한 것이 아니며, 여기서 잘못된 점을 알고 싶습니다. (내 영어에 대한 미안, 그 litlle 가난한하지만 최선을 다하겠습니다)자바에서 음수를 사용하는 스캐너의 이상한 동작

이것은 거래입니다, 나는 방법을 사용하여 자바에서 int를 반환하는 방법은 프로그램을 피하기 위해 캐치를 사용하여 폭발

아니라 (그 메신저 그냥 프로그래밍 및 자바 아 파크 시작 유의하시기 바랍니다)이 metod이 같은 캐치하려고 사용합니다. (이 모든 코드가^영어로 중상되었습니다 ^)

public int safeEnter(String message, int min, int max) { 
    /** 
    * This method takes some parameters and validates the true enter of an int 
    * inside some ranges 
    */ 
    int aux; 
    String auxInt; 

    do { 
     auxInt = input.nextLine().trim(); 
     try { 
      aux = Integer.parseInt(auxInt); 
     } catch (NumberFormatException ex) { 
      System.out.println("Enter a " + message + " between " + min + " & " + max); 
      aux = Integer.MIN_VALUE; 
     } 
    } 
    while(aux < min || aux > max);   
    return aux; 
} 

Weel, 문제는이 방법을 다음과 같이 사용하고 있습니다 :

int month = safeEnter("month", 1, 12); 

이 내가 그것을 char 또는 int 형의 대신 단어를 주면 문제의 타당성을 검증하고, 계획이었습니다으로이 실제로 prety 작동, 다시 INT를 요청합니다,하지만 난 이것을 음수를 제공하는 경우 내가 메시지를 표시하고 다시 전화 번호를 요청하기 전에 2를 입력해야합니다, 나는이 문자열이나 int 범위 또는 범위 사이의 int하지만 beeing 긍정적 인 경우이 hapenn 못해.

여기에 무슨 문제가 있다고 생각하십니까? 내가 "알았어 야지 스캐너에 대해 뭔가"괜찮 았을까?

최저

, 마우는

+0

입력 값과 예상 출력 값주십시오 - 죄송합니다 – Bohemian

+0

가 여기 물어 내 처음이며, 내가하지 영어를 잘 해요 단위 테스트 등을 무엇을 그게 무슨 소리 야? 나는이 메소드가 int의 입력을 검증하고 문자열이나 char를받는다면 다시 숫자를 요구할 것이라고 말했다. 더 자세히 설명하고 최선을 다할 것이다. – Mauricio

답변

1

음수는 유효한 정수와 NumberFormatException이를 포기하지 않습니다. 따라서 루프 상태가 true로 평가되고 do-while 루프가 다시 실행되고 검사 프로그램에서 입력을 다시 요청합니다.

당신이 시도 할 수있는 작업은 다음과 같습니다

Scanner input = new Scanner(System.in); 
while(true) { 
    try { 
     auxInt = input.nextLine().trim(); 
     aux = Integer.parseInt(auxInt); 

     if(aux >= min & aux <= max) 
      break; 

     System.out.println("Enter a " + message + " between " + min + " & " + max); 
    } catch (NumberFormatException ex) { 
     System.out.println("Enter a " + message + " between " + min + " & " + max); 
} 
+0

Mmmmm 나는 그것에 대해 생각하지 않았다. 하지만 그 숫자가 범위를 벗어 났습니까? 예, 그는 그 사람입니다. 그리고 나에게 아무것도 말하지 마라. 고마워요! 너는 천재 야!!! – Mauricio

+0

당신이 준 코드에 관한 또 다른 질문입니다. (사실) wath는 이것을 "사실"이라고 말하면서, 그것이 참인지 거짓인지를 알기 위해 어떤 조건이 필요한가요? 고맙습니다. 수퍼 유용한 곳 – Mauricio

+0

"true"와 "false"는 부울 값입니다. 모든 루프 조건은 부울 값으로 평가되어야합니다 (코드에서 aux max, 부울 값으로 평가되는 표현식이 있음). 따라서 "while (true)"는 무한 루프입니다. 내 코드에서 루프를 종료하는 break 문이 있음에 유의하십시오. – happymeal