我目前正在研究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时,代码停止,因为它应该停止(因为猜测变得等于兰特)。但是,如果我输入任何不是整数的东西(例如" No"),则会在输出打印以下内容时出现无限循环:
"你的猜测必须是整数。"
"输入您的猜测:您的猜测必须是整数。"
"输入您的猜测:您的猜测必须是整数。"
"输入您的猜测:您的猜测必须是整数。"
永远重复,直到程序外部终止。
由于while语句是(guess!= rand),为什么非整数导致这个无限循环?不应该再次调用try语句下的手动输入吗?任何理解这一点的帮助将不胜感激。另外,我对Java很新,所以如果我遇到简单的问题,请提前抱歉。
答案 0 :(得分:4)
当扫描仪抛出
InputMismatchException
时,扫描仪不会 传递导致异常的令牌,以便可以检索它 或通过其他方法跳过。
目前,您的Scanner
没有继续阅读下一个输入但是连续阅读相同的内容。您必须显式调用某些方法,这些方法可以读取不正确的值 expect 。例如,scanner.next()
块中的catch
调用可以避免此无限循环。
答案 1 :(得分:1)
您不需要使用try catch语句。您只需使用对象扫描程序的hasNextInt()方法检查它是否为整数。这是一个例子,它将解决您的问题:
public static void main(String[] args) {
Scanner cg = new Scanner(System.in);
boolean valid = false;
//Assign and define variables
int guess, rand;
guess = 0;
rand = 10;
//Create loop
do{
System.out.println("Enter your guess: ");
if(cg.hasNextInt()){
guess = cg.nextInt();
valid = true;
}else{
System.out.println("Your guess must be an integer.");
cg.next();
}
}while (!valid || guess != rand);
}
答案 2 :(得分:1)
使用以下代码:
catch(InputMismatchException exception){
cg.next();
System.out.println("Your guess must be an integer.");
}
读取缓冲区失败后,其值不会被清空,下次cg.nextInt()
它尝试读取相同的wrong value
时,您就会循环播放。你需要"清空缓冲区",所以下次它会读取正确的值。
答案 3 :(得分:-2)
尝试重置变量" guess = 0"在catch区。