2013-09-24 4 views
0

Когда этот код запускается со строкой в ​​качестве входного сигнала, так что возникает ошибка, это вызывает бесконечный цикл сообщения об ошибке. Я пробовал вставить разрыв; после сообщения об ошибке, которое останавливает цикл, но также останавливает программу. Я хотел бы, чтобы он вернулся к запросу ввода после возникновения ошибки.Бесконечный цикл при возникновении ошибки

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(); 
} 

Off Примечание: Используйте if(error) вместо (error == true). Последний немного нахмурился.

+0

Вы имеете в виду использование 'while (error)'? –

+0

Да, это правильно. – rocketboy

1
if (in.hasNextDouble()) 

Это будет стрелять в первый раз, когда пользователь вводит его. Когда есть ошибка, хотя, это не дает пользователю возможность ввести в значение double, следовательно, бесконечный цикл.

Restructure ваш цикл следующим образом:

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(), конечно, будет правдой на следующей итерации, так как в очереди есть еще не двойное значение.

Смежные вопросы