用户输入中的 NoSuchElementException 问题 Java

NoSuchElementException Problem in User Input Java

我在使用我创建的 Java 程序时感到困惑。

public static void main(String[] args) {
    Scanner scanner1 = new Scanner(System.in);
    int input1 = 0;
    boolean Input1Real = false;
    System.out.print("Your first input integer? ");
    while (!Input1Real) {
        String line = scanner1.nextLine();
        try {
            input1 = Integer.parseInt(line);
            Input1Real = true;
        }
        catch (NumberFormatException e) {
            System.out.println("Use an integer! Try again!");
            System.out.print("Your first input integer? ");
        }
    }
    System.out.println("Your first input is " + input1);
}

最初,当用户Ctrl+D在输入过程中,它会立即结束程序并以这种形式显示错误,

    Your first input integer? ^D
    Class transformation time: 0.0073103s for 244 classes or 2.9960245901639343E-5s per class
    Exception in thread "main" java.util.NoSuchElementException: No line found
        at java.base/java.util.Scanner.nextLine(Scanner.java:1651);
        at Playground.Test1.main(Test1.java:13)

做一些研究我注意到 Ctrl+D 终止了排序的输入。因此,我尝试在我的代码中添加几行以防止错误再次出现,而是打印一个简单的 "Console has been terminated successfully!" 并尽我所能。

public static void main(String[] args) {
    Scanner scanner1 = new Scanner(System.in);
    int input1 = 0;
    boolean Input1Real = false;
    System.out.print("Your first input integer? ");
    while (!Input1Real) {
        String line = scanner1.nextLine();
        try {
            try {
                input1 = Integer.parseInt(line);
                Input1Real = true;
            }
            catch (NumberFormatException e) {
                System.out.println("Use an integer! Try again!");
                System.out.print("Your first input integer? ");
            }
        }
        catch (NoSuchElementException e) {
            System.out.println("Console has been terminated successfully!");
        }
    }
    System.out.println("Your first input is " + input1);
}

最后还是报同样的错误

知道了!,代码hasNext()将确保不会出现该错误。此方法是检查扫描仪的输入中是否还有另一行,并检查其是否已填充或为空。我还使用 null 在通过循环后检查我的语句,因此如果输入值仍然是 null 程序将停止,同时保持 Ctrl+D.

的功能
public static void main(String[] args) {
    Integer input1 = null;
    System.out.println("Your first input integer? ");
    Scanner scanner1 = new Scanner(System.in);
    while(scanner1.hasNextLine()) {
        String line = scanner1.nextLine();
        try {
            input1 = Integer.parseInt(line);
            break;
        }
        catch (NumberFormatException e) {
            System.out.println("Use an integer! Try again!");
            System.out.println("Your first input integer? ");
        }
    }
    if (input1 == null) {
        System.out.println("Console has been terminated successfully!");
        System.exit(0);
    }
    System.out.println(input1);
}

当然这个解决方案并不完美,但如果有更简单的选择,我将不胜感激。