java - 扫描仪抛出 null 的 InputMismatchException

标签 java java.util.scanner inputmismatchexception

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String [] args) throws InputMismatchException{
    double width;
    int period;
    double Ppp;
    Scanner in0  = new Scanner(System.in);
    Scanner in1  = new Scanner(System.in);
    Scanner in2  = new Scanner(System.in);
    System.out.println("Give width\n");
    while(in0.hasNextDouble()){
        width = in0.nextDouble();
    }
    in0.close();
    System.out.println("\n");
    System.out.println("Give period");
    while(in1.hasNextInt()){
        period = in1.nextInt();
    }
    in1.close();
    System.out.println("\n");
    System.out.println("Insert width peak to peak");
    while(in2.hasNextDouble()){
        Ppp = in2.nextDouble();
    }
    in2.close();
}

我运行这个代码块 我插入第一个输入,但每个输入都显示为空 然后它崩溃了 有人可以运行它并告诉他是否有同样的问题 我使用BlueJ编译器

最佳答案

问题的原因是这样的

Scanner in0  = new Scanner(System.in);
Scanner in1  = new Scanner(System.in);
Scanner in2  = new Scanner(System.in);

还有这个

in0.close();
...
in1.close();
...
in2.close();

当您创建扫描程序时,您将处理System.in,然后将其关闭。这会导致下一个扫描程序在关闭的流上运行。

解决方案是为InputStream 创建一个Scanner

Scanner scanner = new Scanner(System.in);

System.out.println("Give width\n");
double width = scanner.nextDouble();

System.out.println("Give period");
int period = scanner.nextInt();

System.out.println("\nInsert width peak to peak:");
double p2p = scanner.nextDouble();

这只是不验证用户输入的示例。

关于java - 扫描仪抛出 null 的 InputMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32716945/

相关文章:

java - 如何为 Kafka Producer 选择 Key 和 Offset

java - 为什么使用 nextFloat 读取时会出现 InputMismatchException?

java - 无需任何数学运算即可使用双基数和整数指数求幂。 Java 中的库

java - 无法使用Java keyStore使用PKCS#1私钥进行客户端身份验证

java - 如何在单个结果集中连接或联合2个sql查询的结果

java - 与记事本不同,在线 Java 编译器上运行代码时出现异常

Java Scanner 需要多个条目

Java IO 无法读取文本文件

java - 多次输入整数时出现InputMismatchException

java - 暂时提高多线程服务中的log4j2记录器级别