NoSuchElementException 与 Scanner.nextLine()

NoSuchElementException with Scanner.nextLine()

我是 Java 的新手,我不知道为什么它在 运行 时给我一个错误。任何人都可以向我解释这是什么问题吗?尽我最大努力 运行domly 尝试不同的事情,但没有成功,我可能会从知道自己在做什么的人那里学到更多。谢谢!

我的代码:

import java.util.Scanner;

// Get date input and display results
// Parse using a delimiter

public class InputOutput3
{
    public static void main(String[] args)
    {
        // Declare variables
        String dateIn, input;
        int month, day, year;
        Scanner scan, scann;

        // Initialize variables
        scan = new Scanner(System.in);

        // Prompt and wait for input
        System.out.print("Enter enter the date (mm/dd/yy) > ");
        dateIn = scan.nextLine();
        scan.close();

        // Analyze value entered
        scan = new Scanner(dateIn);
        scan.useDelimiter("/");
        month = scan.nextInt();
        day = scan.nextInt();
        year = scan.nextInt();

        // Display results
        System.out.println("The month is " + month);
        System.out.println("The day is " + day);
        System.out.println("The year is " + year);

        //Get their name
        scann = new Scanner(System.in);
        System.out.print("Please enter your name: ");
        input = scann.nextLine();
        System.out.print("Your name is " +input);


        // Close resources
        scan.close();
        scann.close();
    }
}

结果:

Please enter your name: 

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at InputOutput3.main(InputOutput3.java:38)

在第 21 行,您关闭了从 System.in 读取的 Scanner,这将关闭与其相关的所有资源(即 System.in)。不要关闭Scanner,你应该是好的。

您真的不需要使用两个扫描仪。有 better classes 用于解析日期。但是如果你打算使用两个扫描器,其中一个来解析日期,那么你应该让扫描器连接到 System.in 打开以从控制台读取,并且读取 dateIn 的扫描器应该附加到 scann。