Scanner.nextLine()的NoSuchElementException

时间:2015-01-22 03:58:46

标签: java java.util.scanner

我是Java的新手,我不知道为什么它在运行时给我一个错误。任何人都可以向我解释这是什么问题?我最好随机尝试不同的东西,但没有在哪里,我可能会从知道他们正在做什么的人那里学到更多东西。谢谢!

我的代码:

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)

2 个答案:

答案 0 :(得分:0)

在第21行,您关闭从Scanner读取的System.in,这会关闭与其相关的所有资源(意味着System.in)。不要关闭Scanner,你应该做得很好。

答案 1 :(得分:-1)

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