java异常与循环结合的一个问题!

我第一次提的问题不够清晰,我编辑了一下:

img


在这里我的思路是如果输入的不是整数,把异常捕获然后打印重新输入后能够重新输入。
但是事实是输入了字符串后,程序进入了死循环不停地打印重新输入

  • nextInt 是 输入整数的用法,你输入字符串,也就是会抛出 输入不匹配的报错,因为你捕获了异常,且打印了”请重新输入“; 这时进入循环,判断hasNext,又等待nextInt 输入,因为输入流里还是之前输入的字符串,nextInt还是 会抛出 输入不匹配的报错。最终导致死循环。

  • hasNext 解释:

img

  • 解决方法,在异常里面 用 nextLine 把输入流里的数据接收掉
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()) {
            try {
                int i = scanner.nextInt();
                System.out.println(i);
                break;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("请重新输入");
                scanner.nextLine();
            }
        }
    }
}

该回答引用自ChatGPT

scanner.hasNext() 方法是 java.util.Scanner 类中的方法,它用于判断输入流中是否还有下一个标记(token)。如果输入流中还有标记,则返回 true,否则返回 false。
在使用 Scanner 对象进行输入时,我们通常会采用循环的方式读取输入,例如:

Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
    String input = scanner.next();
    // 处理输入
}

在这个例子中,scanner.hasNext() 方法用于判断输入流中是否还有下一个标记,如果有,则继续循环读取输入并处理;如果没有,则退出循环。这样可以保证程序不会因为输入不足而陷入死循环或抛出异常。