Java 从键盘读取数据时发生异常

Java 从键盘读取数据时发生异常,java,exception,java.util.scanner,Java,Exception,Java.util.scanner,我是Java新手,我试图从键盘读取数据,但我遇到了一个异常,我不知道为什么以及如何修复它 导入java.util.Scanner public class Test { public static void main(String[] args) { Test r = new Test(); System.out.println("Type a int number : " + r.readI

我是Java新手,我试图从键盘读取数据,但我遇到了一个异常,我不知道为什么以及如何修复它

导入java.util.Scanner

    public class Test {
        public static void main(String[] args) {
        Test r = new Test();
        
        System.out.println("Type a int number      : " + r.readInteger());
        System.out.println("type a double number: " + r.readDouble());
    }

    public int readInteger() {
        Scanner input = new Scanner(System.in);
        int val = 0;
        
        while(true) {
            if(input.hasNextInt()) {
                val = input.nextInt();
                input.nextLine();
                break;
            }
            else {
                System.out.println("Invalid data type.");
                input.nextLine();
            }
        }

        input.close();

        return val;
    }

    double readDouble() {
        Scanner input = new Scanner(System.in);
        double val = 0;
        
        while(true) {
            if(input.hasNextDouble()) {
                val = input.nextDouble();
                input.nextLine();
                break;
            }
            else {
                System.out.println("Invalid data type.");
                input.nextLine();
            }
        }

        input.close();

        return val;
    }
}
免除:

[roger@archroger~]$java测试

三,

键入一个整数:3

无效的数据类型

线程“main”java.util.NoSuchElementException中出现异常:未找到任何行

位于java.util.Scanner.nextLine(Scanner.java:1540)

at Test.readDouble(Test.java:44)

at Test.main(Test.java:8)


当扫描仪的输入流为
System.in
时,不要关闭扫描仪。这也将关闭标准输入,并且当您不检查行是否存在时,诸如
scanner.nextLine()
之类的语句将抛出
NoTouchElementException
。使用
scanner.hasNextInt()
检查是否有另一个整数标记可用,然后尝试使用
scanner.getNextLine()
获取另一行,而不测试该行是否存在。使用scanner.hasNextLine()