我对代码中的catch语句之后的操作有点困惑。抛出异常并在循环中捕获后,循环变为无限。我还发现输入一个很长的序列(+10左右)的数字将导致循环无限。我在java中的异常处理方面相当新,所以详细描述将非常有教育意义。
public static void main(String[] args)
{
boolean cont = false;
while (!cont)
{
addInputNumber();
cont = tryAgain();
}
}
private static void addInputNumber ()
{
boolean valid;
int total;
int inputInt;
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
do
{
try
{
System.out.print("Enter a number(between 0 and 1000)");
inputInt = input.nextInt();
if(inputInt > 0 && inputInt < 1000)
{
valid = true;
total = (inputInt % 10) + ((inputInt / 10) % 10) + (inputInt / 100);
System.out.println("\n" + "The total of " + inputInt + " is " + total);
}
else
{
System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n");
valid = false;
}
}
catch(InputMismatchException ex)
{
System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n");
valid = false;
}
} while(!valid);
}
答案 0 :(得分:0)
更改
catch(InputMismatchException ex)
{
System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n");
valid = true;
}
答案 1 :(得分:0)
在catch块上,您的变量valid设置为false。 然后在代码上
while(!valid)
条件为真,循环无限
答案 2 :(得分:0)
你的do while循环必须以
结束 while(valid);
因为,一旦你发现异常valid
变为false
,你可能想要在发现异常时退出循环
答案 3 :(得分:0)
方法tryAgain()
有什么作用?
看起来它叫addInputNumber()
,对吧?如果是这样,您不需要方法addInputNumber()
中的循环。
我认为你的问题不是在catch块中做什么,而是程序结构。你正在使用两个循环,你可能只需要一个循环。你可以让addInputNumber()
返回一个布尔值。