从键盘

时间:2018-05-28 13:52:58

标签: java exception java.util.scanner

我是Java的新手,我正在尝试从键盘读取数据,但我得到一个例外,我不知道为什么以及如何解决它。

import 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 Test

     

3

     

输入一个int号:3

     

数据类型无效。

     

线程“main”中的异常java.util.NoSuchElementException:找不到行

     

at java.util.Scanner.nextLine(Scanner.java:1540)

     

在Test.readDouble(Test.java:44)

     

在Test.main(Test.java:8)

1 个答案:

答案 0 :(得分:1)

当输入流为System.in时,请勿关闭扫描仪。这也会关闭标准输入,而scanner.nextLine()这样的语句会在您不检查该行是否存在时抛出NoSuchElementException。如果另一个整数令牌可用,请与scanner.hasNextInt()核对,然后尝试使用scanner.getNextLine()获取另一行,而不测试该行是否存在。使用scanner.hasNextLine()