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

    }  
}   
4

3 回答 3

2

如果出现错误,请移动扫描仪的光标,否则它将继续读取相同的值。

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

关闭注释:使用if(error)而不是(error == true). 后者有点不受欢迎。

于 2013-09-24T13:44:52.897 回答
1
if (in.hasNextDouble())

这将在用户输入时第一次触发。但是,当出现错误时,它不会给用户输入double值的机会,因此是无限循环。

像这样重组你的循环:

String input;
while((input = in.nextDouble()) != null)
{
    // Force the user to type a value.
    // The rest of your code here.
}
于 2013-09-24T13:45:50.550 回答
0

如果输入不是双精度,则必须使用 eg 读取输入in.next(),否则,in.nextDouble()在下一次迭代中当然会为真,因为“队列”中仍然存在非双精度值。

于 2013-09-24T13:47:02.097 回答