初学者Java遇到的小问题

用户输入一个整数,如果不是整数就提示他反复输入,直到正确;
但当我输入错误时,一直循环,没有等我输入;

public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = 0;
        while(true){
            try {
                System.out.println("输入一个整数");
                input = scanner.nextInt();
                break;
            } catch (Exception e) {
                System.out.println("你输入的不是一个整数");
            }
        }
    }
}

运行结果就是:
输入一个整数
1.1
你输入的不是一个整数
输入一个整数
一直循环

我试着把
Scanner scanner = new Scanner(System.in);
input = scanner.nextInt();
改成
input = new Scanner(system.in).nextInt();
就可以了;

但不明白为什么,求大家解惑
希望能解释细致一点,初学者正在学习

有用记得采纳,谢谢。代码中的问题是:当使用了Scanner的nextInt方法时,如果用户输入的不是整数,会抛出一个异常,但此时Scanner的缓存仍然保留着错误的输入数据。因此,在下一次调用Scanner的nextInt方法时,它将仍然返回错误的输入数据,导致代码一直在循环中。

解决方案是:使用Scanner的nextLine方法将错误的输入数据从缓存中清除,再次读取一个整数


public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = 0;
        while(true){
            try {
                System.out.println("输入一个整数");
                input = scanner.nextInt();
                break;
            } catch (Exception e) {
                System.out.println("你输入的不是一个整数");
                scanner.nextLine();
            }
        }
    }
}

在while语句块外面初始化new Scanner,则while循环体里面只能使用1次,只会等待用户1次输入动作
把new Scanner放到while循环体里面,则可以反复等待用户输入

Scanner类的create方法被定义为了接受一个InputStream参数,而你在这里没有,使用一个新的Scanner对象代替即可,并且你需要将这个参数传递给Scanner对象才能正常使用。 比如,如果我们想要从System.in中读取一个数字,可以这样做: Scanner scanner = new Scanner(System.in); int input = scanner.nextInt();

这样的话,scanner就会从System.in中读取这个数字,然后返回给变量input。 因此,如果你想要从System.in中获取输入的数字,一定要创建一个新的Scanner对象,并且将System.in参数传递给这个对象。

该回答引用ChatGPT
该代码的逻辑是:使用 Scanner 类的 hasNextInt 方法判断是否为整数,如果不是整数就使用 next 方法读取该数据并重新输入,直到输入为整数为止。
实现代码如下,


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        while (!input.hasNextInt()) {
            input.next();
            System.out.print("输入不是整数,请重新输入:");
        }
        int number = input.nextInt();
        System.out.println("您输入的整数是:" + number);
    }
}