【发布时间】:2020-02-01 04:29:04
【问题描述】:
我正在尝试向此菜单添加输入验证。当用户输入 eg: '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);
【问题讨论】:
-
4是退出,那么应该是>= 4吗?此外,nextInt不会清除悬空的新行字符,而仍卡在缓冲区中(这是您问题的主要原因) - 您应该使用nextLine,然后将结果解析为int -
嗨,我很新。你能告诉我如何解析它吗?
-
我可以在执行 catch 块后以某种方式清除输入吗?那行得通吗?是否有清除输入的方法或东西?
-
就个人而言,我会使用
sc.nextLine();,它会返回一个String,然后使用Integer.parseInt(valueFromScanner)来解析结果 -
我确实尝试过 { System.out.print("Enter"); x = sc.nextInt(); sc.nextLine(); Integer.parseInt(x);它给了我以下错误 Main.java:17: 错误:不兼容的类型:int 无法转换为 String
标签: java loops try-catch infinite-loop do-while