【发布时间】:2015-09-19 10:01:20
【问题描述】:
我目前正在 Eclipse 中编写一些 Java 代码,并尝试在 do-while 语句中使用 try-catch 语句。我目前的代码如下:
import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Random;
public class GG_HighLowInvalid{
public static void main(String[] args){
Scanner cg = new Scanner(System.in);
//Assign and define variables
int guess, rand;
guess = 0;
rand = 10;
//Create loop
do
try{
guess = 0;
//Ask for a guess
System.out.print("Enter your guess: ");
//Record the guess
guess = cg.nextInt();
}
catch(InputMismatchException exception){
System.out.println("Your guess must be an integer.");
}
while (guess != rand);
}
}
当我输入任何数字时,代码都可以正常工作,并且会循环询问另一个输入,当输入 10 时,代码会按预期停止(因为guess 等于 rand)。但是,如果我输入任何不是整数的内容(例如“No”),则会出现无限循环,输出会打印以下内容:
“你的猜测一定是整数。”
“输入你的猜测:你的猜测必须是整数。”
“输入你的猜测:你的猜测必须是整数。”
“输入你的猜测:你的猜测必须是整数。”
一直重复直到程序被外部终止。
既然 while 语句是 (guess != rand),为什么非整数会导致这个无限循环?不应该再次调用try-statement下的手动输入吗?任何有助于理解这一点的帮助将不胜感激。另外,我对 Java 还很陌生,如果遇到简单的问题,请提前道歉。
【问题讨论】:
-
当
while条件对guess和rand进行评估时,您是否尝试过使用调试器查看它的值? -
输入非整数这一事实不会影响
guess是int的事实,其值为0(或您的最新猜测值之一)。因此,guess != rand之前保持不变。然而,真正的问题是Scanner对象一直在读取相同的输入而不要求新的输入。 @TAsk 的回答解决了这个问题。
标签: java eclipse try-catch infinite-loop do-while