我有一个菜单,其中整数零到六有不同的操作。如果用户输入正确,它会成功执行操作并再次要求输入以执行下一个操作。要退出程序菜单,用户输入必须为 6。如果收到任何无效输入,它会打印“无效选项”并重新打印要求输入。我的代码是:int menuSelection;Scanner reader = new Scanner(System.in); // Reading from System.indo{ System.out.println("Enter a number: "); if (reader.hasNext(Pattern.compile("^[0-6]$"))) { menuSelection = reader.nextInt(); } else { System.out.println("Invalid option"); reader.next(); }} while(menuSelection != 6);//once finishedreader.close();我的输出是:Enter a number: 1Enter a number: 2Invalid optionEnter a number: 3Invalid optionEnter a number: 4Invalid optionEnter a number: 5Invalid optionEnter a number: 6Invalid optionEnter a number: 7Invalid optionEnter a number: 8Invalid optionEnter a number: pancakeInvalid optionEnter a number: 所以它正确地处理了我给它的第一个输入,但在那之后,它陷入了无限循环,因为它总是认为我的输入不正确。我的逻辑是有一个 do while 只要menuSelection不是 6就总是重复,因为这是程序将永远退出的唯一时间,其他一切都应该循环回到等待输入。所以然后在 do while 循环中我希望我可以在那里进行错误检查,确保输入在 0-6 的范围内并且也是严格的整数类型,否则在不执行操作的情况下再次通过循环(这不是t 实际上已编码到 if 块中)。我对 Java 还很陌生,所以我不是最熟悉 Scanner 以及它如何处理验证的人。我想我的问题是,是什么导致我的其他输入无效?
1 回答
慕斯王
TA贡献1864条经验 获得超2个赞
检查您的正则表达式。尝试:
if (reader.hasNext(Pattern.compile("[0-6]"))) {
menuSelection = reader.nextInt();
}
这意味着,当检测到模式[0-6](0 到 6 之间的任何数字)时,它会按您的预期工作。
[编辑]
正如cricket_007建议的那样,我最后删除了{1}(仅一次)。
[/编辑]
例子:
Enter a number:
sdf
Invalid option
Enter a number:
3
Enter a number:
2
Enter a number:
1
Enter a number:
5
Enter a number:
8
Invalid option
Enter a number:
6
添加回答
举报
0/150
提交
取消