java - 如何修复我的 while 语句以便仅从输入中获取数字?
问题描述
每当用户输入字母时,我的代码就会崩溃。我想让它让用户只能输入 18 岁以下的整数。如果它在 18 岁以下,我想提示他们“输入 18 岁以下的数字”,如果是字母提示他们“只输入整数”。
我让 18 岁以下的工作和 18 岁以上的工作。我已经尝试了字母的while循环,但它仍然会崩溃。
static void intMethod (String vName) {
Scanner intInput = new Scanner(System.in);
System.out.print("Enter "+ vName + ": ");
intStore = intInput.nextInt();
while(tf) {
if (intStore < 18 ) {
tf = false;
}else if(intStore >= 18) {
System.out.println("Please only enter a whole number under 18");
System.out.print("Enter an " + vName + ": ");
intStore = intInput.nextInt();
}else if(!intInput.hasNextInt()){
System.out.println("Please only enter a whole number under 18");
System.out.print("Enter an " + vName + ": ");
intInput.nextLine();
}
}
}
每当我尝试输入字母时,我都会在堆栈跟踪中收到此错误消息:
Enter age: af
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at IlstueduClass.FunWithMethods.intMethod(FunWithMethods.java:27)
at IlstueduClass.FunWithMethods.main(FunWithMethods.java:56)
解决方案
我将通过将响应存储到字符串并尝试将其解析为整数来解决此问题。
String response;
Scanner intInput = new Scanner(System.in);
System.out.print("Enter "+ vName + ": ");
response = intInput.next();
try {
intStore = Integer.parseInt( response );
}
catch (NumberFormatException e) {
System.out.println("Please enter a whole number only");
}
推荐阅读
- r - 来自 Leaflet.extras 包的 addKML 文件中的自定义图标
- python - 如何像在 Keras 中使用函数一样使用层?
- bash - 在脚本化管道中使用 shell 脚本设置 env 变量的值
- angular - 为什么 Ionic sometines 需要超时来处理组件
- wordpress - WordPress博客的虚拟目录
- php - php字符串日期到日期时间格式
- tkinter - 如何使 tkinter 下拉以在 python 3 中保存数据?
- javascript - Observables - Angular - .map 不起作用,但 .subscribe 可以
- python - 将获取图像索引并返回其颜色的函数
- c# - Linq 挑战:将这段代码从方法链转换为标准 Linq