如何在Java中使用hasNextInt检查输入的值是否为整数?

如何在Java中使用hasNextInt检查输入的值是否为整数?,java,Java,我正在尝试制作一个程序,要求用户输入年龄并循环,直到年龄为正或一个数字。当我输入负数时,外观会起作用,它会要求再次输入数字,但当我输入类似“xyz”的字母时,循环不起作用,程序崩溃 public static void firstScannerMethod () { Scanner scanner = new Scanner(System.in); //importing scanner class System.out.println("enter y

我正在尝试制作一个程序,要求用户输入年龄并循环,直到年龄为正或一个数字。当我输入负数时,外观会起作用,它会要求再次输入数字,但当我输入类似“xyz”的字母时,循环不起作用,程序崩溃

public static void firstScannerMethod () {
        Scanner scanner = new Scanner(System.in); //importing scanner class
        System.out.println("enter your age: ");
        boolean hasNextIntAge = scanner.hasNextInt(); //checking to see if next entered value is an integer
        int myAge = scanner.nextInt();
        scanner.nextLine(); //handling enter
        while (myAge < 0 || !hasNextIntAge) { // if age is less than 0 or if age is not an integer, prompt again
            System.out.println("invalid age, try again");
            System.out.println("enter your age: ");
            myAge = scanner.nextInt();
            scanner.nextLine();
        }
            System.out.println("your age is " + myAge);
        scanner.close();
}
公共静态void firstScannerMethod(){
Scanner Scanner=new Scanner(System.in);//导入Scanner类
System.out.println(“输入您的年龄:”;
布尔值hasnetintage=scanner.hasnetint();//检查下一个输入值是否为整数
int myAge=scanner.nextInt();
scanner.nextLine();//处理回车
while(myAge<0 | | |!hasnextingage){//如果age小于0或age不是整数,请再次提示
System.out.println(“无效年龄,重试”);
System.out.println(“输入您的年龄:”;
myAge=scanner.nextInt();
scanner.nextLine();
}
System.out.println(“您的年龄是”+myAge);
scanner.close();
}

在调用nextInt方法之前,您没有检查hasNextIntAge的值。因此,当nextInt获取字符串值时,它会抛出InputMismatchException。我已经更新了您的代码,仅当输入为整数时才设置myAge

public static void firstScannerMethod () {
    Scanner scanner = new Scanner(System.in);
    System.out.println("enter your age: ");
    while (!scanner.hasNextInt()) {
        System.out.println("invalid age, try again");
        scanner.next();
    }
    int myAge = scanner.nextInt();
    while (myAge < 0) {
        System.out.println("invalid age, try again");
        while (!scanner.hasNextInt()) {
            System.out.println("invalid age, try again");
            scanner.next();
        }
        myAge = scanner.nextInt();
    }
    System.out.println("your age is " + myAge);
    scanner.close();
}
公共静态void firstScannerMethod(){
扫描仪=新的扫描仪(System.in);
System.out.println(“输入您的年龄:”;
而(!scanner.hasnetint()){
System.out.println(“无效年龄,重试”);
scanner.next();
}
int myAge=scanner.nextInt();
而(我的年龄<0){
System.out.println(“无效年龄,重试”);
而(!scanner.hasnetint()){
System.out.println(“无效年龄,重试”);
scanner.next();
}
myAge=scanner.nextInt();
}
System.out.println(“您的年龄是”+myAge);
scanner.close();
}

在调用nextInt方法之前,您没有检查hasNextIntAge的值。因此,当nextInt获取字符串值时,它会抛出InputMismatchException。我已经更新了您的代码,仅当输入为整数时才设置myAge

public static void firstScannerMethod () {
    Scanner scanner = new Scanner(System.in);
    System.out.println("enter your age: ");
    while (!scanner.hasNextInt()) {
        System.out.println("invalid age, try again");
        scanner.next();
    }
    int myAge = scanner.nextInt();
    while (myAge < 0) {
        System.out.println("invalid age, try again");
        while (!scanner.hasNextInt()) {
            System.out.println("invalid age, try again");
            scanner.next();
        }
        myAge = scanner.nextInt();
    }
    System.out.println("your age is " + myAge);
    scanner.close();
}
公共静态void firstScannerMethod(){
扫描仪=新的扫描仪(System.in);
System.out.println(“输入您的年龄:”;
而(!scanner.hasnetint()){
System.out.println(“无效年龄,重试”);
scanner.next();
}
int myAge=scanner.nextInt();
而(我的年龄<0){
System.out.println(“无效年龄,重试”);
而(!scanner.hasnetint()){
System.out.println(“无效年龄,重试”);
scanner.next();
}
myAge=scanner.nextInt();
}
System.out.println(“您的年龄是”+myAge);
scanner.close();
}

仔细考虑您的逻辑。
hasnetintage
应在流程中的哪个点设置其值?它在什么时候发生?@KarlKnechtel hasnetintage从下一个输入no获取其值(true或false)?请帮助我理解?看看您在哪里测试扫描仪是否有其他值,以及从扫描仪读取下一个值。请看您执行这些步骤的顺序。我希望您只调用此方法一次,或者没有其他方法使用Scanner with System.in。关闭任何使用System.in的扫描仪都会关闭System.in,并且几乎不可能重新打开它。@NomadMaker是的。只有一个示例方法。仍然无法理解逻辑仔细考虑你的逻辑。
hasnetintage
应在流程中的哪个点设置其值?它在什么时候发生?@KarlKnechtel hasnetintage从下一个输入no获取其值(true或false)?请帮助我理解?看看您在哪里测试扫描仪是否有其他值,以及从扫描仪读取下一个值。请看您执行这些步骤的顺序。我希望您只调用此方法一次,或者没有其他方法使用Scanner with System.in。关闭任何使用System.in的扫描仪都会关闭System.in,并且几乎不可能重新打开它。@NomadMaker是的。只有一个示例方法。不过,我还是不明白其中的逻辑