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/