2015-02-07 3 views
3

내 프로그램은 부동 소수점 변수를 받아들이고 종료합니다. 그러나 일부 예외 처리 물건을 연습하고 문제를 발견했습니다. 이 프로그램에 글자를 입력 할 때마다 물론 프로그램은 InputMismatchException을 던지지만 무한 루프 안에 갇히게됩니다. 내 문제는 try-catch 문과 예외 처리에 대한 오해를 기반으로한다고 가정합니다.부동 소수점 변수와 예외 처리

public static void main(String [] args){ 

    Scanner reader = new Scanner(System.in); 
    boolean done = false; 

    do{ 
     try{ 
      System.out.print("Enter a number: "); 
      float number = reader.nextFloat(); 
      done = true; 
     } 
     catch (Exception e){ 
      System.out.println("uh oh"); 
     } 
    }while(!done); 
} 

나는 그것이 논리적 오류 또는 부동 소수점 변수 펑키 단지 뭔가 잘 모르겠어요 그래서 다른 변수 유형을 사용하는 경우이 문제가 발생하지 않습니다.

+1

"무한 루프"란 무엇을 의미합니까? 출력물을 얻었습니까? –

+0

예 "숫자를 입력하십시오 : 어 오"라는 말을 반복해서받습니다. –

답변

5

Float#nextFloat()InputMismatchException을 throw하면 Scanner의 토큰을 소비하지 않습니다. 따라서 done이 여전히 false이기 때문에 예외 및 루프가 발생하면 nextFloat()으로 다시 전화를 걸려고합니다. 토큰이 여전히 float으로 구문 분석 할 수있는 값이 아니기 때문에 Scanner은 다시 예외를 throw합니다. 그리고 다시, 그리고 다시, 광고 구역질.

float 값으로 구문 분석 할 수있는 토큰이 있는지 확인하려면 hasNextFloat()을 사용해야합니다. 또는 Quirliom에서 제안한대로 Scanner#next()으로 잘못된 값을 사용하십시오.

+0

'hasNextFloat()'이 false를 반환하면, 입력 스트림은'next()'로 옮겨 져야한다는 것을 주목할 필요가 있습니다. ... – Sinkingpoint

+0

도움을 청합니다. 나는 그것을 작동 시켰어. –