2013-09-24 4 views
0

오류가 발생하도록 문자열을 입력으로 사용하여이 코드를 실행하면 오류 메시지가 무한 루프가됩니다. 나는 break를 삽입하려고 시도했다. 루프를 멈추고 프로그램을 멈추게하는 에러 메시지 이후에. 오류가 발생한 후 입력 요청으로 다시 루프를 보내고 싶습니다.오류가 발생하면 무한 루프가 발생합니다.

import java.util.Scanner; 

public class CubeUser       
{            

    public static void main(String argv[])  
    { 
     Scanner in = new Scanner(System.in); 
     boolean error = true; 
     System.out.print("Please input the length of the cube:");        
     while(error == true) 
     { 
      if (in.hasNextDouble()) 
      { 
       double length = in.nextDouble(); 
       Cube cube1 = new Cube(length);               
       System.out.println("The surface area of cube1 is " + cube1.calculateSurfArea());  
       System.out.println("The volume of cube1 is " + cube1.calculateVolume()); 
       error = false; 
      } 
      else 
      { 
       System.out.println("Please enter a numerical value for the cube's length."); 
      } 
     } 
     in.close(); 

    } 
} 

답변

2

오류가 발생하면 스캐너 커서를 이동하십시오. 그렇지 않으면 스캐너가 동일한 값을 계속 읽습니다. 참고 오프

else { 
    System.out.println("Please enter a numerical value for the cube's length."); 
    in.next(); 
} 

: 사용 if(error) 대신 (error == true). 후자는 약간 눈살을 찌푸리게됩니다. 하지만 오류가있을 때 사용자 유형이있다. 그것은 사용자에게 double 값, 따라서 무한 루프를 입력 할 수있는 기회를 제공하지 않습니다

+0

'while (error)'을 사용 하시겠습니까? –

+0

예, 맞습니다. – rocketboy

1
if (in.hasNextDouble()) 

이 처음으로 실행됩니다. 그래서 같은

재구성 루프 : 그것은 예를 들어, 사용하는 이중 아닌 경우

String input; 
while((input = in.nextDouble()) != null) 
{ 
    // Force the user to type a value. 
    // The rest of your code here. 
} 
0

당신은 입력을 읽을 수 있어야합니다 in.next(), 그렇지 않으면 in.nextDouble()은 물론 '큐'에 비 이중 값이 있으므로 다음 반복에서도 마찬가지입니다.

관련 문제