[英]Do - while goes into an infinite loop
我正在尝试向此菜单添加输入验证。 当用户输入例如:'a' 或任何不是整数且具有给定范围的输入时,它必须执行 catch 块并再次循环以提示用户再次输入,但在输入一次后继续无限循环. 所以它从执行菜单开始,只是跳过输入部分并执行 catch 块。
编辑:如果我输入任何不是整数的内容,它就会进入无限循环。
Scanner sc = new Scanner(System.in);
int x = 1;
do{
try
{
System.out.println("Select option ");
System.out.println("1) Circle ");
System.out.println("2) Rectangle ");
System.out.println("3) Triangle ");
System.out.println("4) Exit ");
x = sc.nextInt();
}
catch(Exception e)
{
System.out.print("Invalid data");
}
}while(x<1 || x>4);
问题是当 Scanner 获取字符/字符串而不是 int 时,您没有刷新缓冲区。 此外,如果在第一次迭代时读入字符/字符串,您的循环将终止,因为您的循环条件将返回 false,x 最初设置为 1。您可以通过将其设置为 -1 来解决此问题。 此外,您可以使用 hasNextInt() 方法来检查用户是否输入了 int,而不是使用 try catch 块。
Scanner sc = new Scanner(System.in);
int x = -1;
do {
System.out.println("Select option ");
System.out.println("1) Circle ");
System.out.println("2) Rectangle ");
System.out.println("3) Triangle ");
System.out.println("4) Exit ");
if (sc.hasNextInt())
{
x = sc.nextInt();
}
else
{
System.out.println("Invalid input. Please try again.");
// Flush the buffer
sc.nextLine();
}
} while (x < 1 || x > 4);
sc.close();
放
sc.nextLine();
下一个
x = sc.nextInt();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.