首页 > 解决方案 > 如何修复我的 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)

标签: java

解决方案


我将通过将响应存储到字符串并尝试将其解析为整数来解决此问题。

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

推荐阅读