java - 从键盘读取数据时出现异常

标签 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.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;
    }
}

异常(exception):

[roger@archroger ~]$ java Test

3

Type a int number : 3

Invalid data type.

Exception in thread "main" java.util.NoSuchElementException: No line found

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

at Test.readDouble(Test.java:44)

at Test.main(Test.java:8)

最佳答案

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

关于java - 从键盘读取数据时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50567995/

相关文章:

java - Apple eciesEncryptionCofactorVariableIVX963SHA256AESGCM vs BouncyCaSTLe ECCDHwithSHA256KDF

java - 在交付单个 jar 并使用反射时,如何避免在命令行中指定完全限定的类名?

php - 在 Magento 中创建 Product 时违反完整性约束

Java 重用扫描器

java - Apache shiro Web 应用程序索引页面作为默认页面

java - 如何在 json 数组中将 boolean 值写为字符串?

exception - Haskell中的非一元错误处理?

laravel - 异常不会渲染 Laravel 5.7

java - 计算文件中的所有字符,包括\n 等

java - 如何忽略非整数输入并继续接受输入