gpt4 book ai didi

java - Do - while 进入无限循环

转载 作者:行者123 更新时间:2023-12-02 09:03:17 26 4
gpt4 key购买 nike

我正在尝试向此菜单添加输入验证。当用户输入例如:'a'或任何非整数且具有给定范围的输入时,它必须执行catch block 并再次循环以提示用户再次输入,但在输入一次后它会无限循环。因此,它从执行菜单开始,跳过输入部分并执行 catch block 。

编辑:如果我输入任何不是整数的内容,它就会进入无限循环。

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

最佳答案

问题是,当扫描器获取字符/字符串而不是整数时,您不会刷新缓冲区。此外,如果在第一次迭代中读入字符/字符串,循环将终止,因为循环条件将返回 false,且 x 最初设置为 1。您可以通过将其设置为 -1 来解决此问题。此外,您可以使用 hasNextInt() 方法来检查用户是否输入了 int,而不是使用 try catch block 。

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

关于java - Do - while 进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60014004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com