我有两个连续的调用,该方法使用BufferedReader
上的InputStreamReader
从键盘读取一行输入。这是两个电话-
System.out.println("Enter size of array for hash table...");
size = getInt();
System.out.println("Enter initial number of items...");
numInitial = getInt();
问题是-虽然第一个调用可以正常运行,但第二个调用失败,但有一个例外-
Enter size of array for hash table...
12
Enter initial number of items...
java.io.IOException: Stream closed
Exception in thread "main" java.lang.NumberFormatException: null
at java.base/java.lang.Integer.parseInt(Integer.java:620)
at java.base/java.lang.Integer.parseInt(Integer.java:776)
at hashing.HashTableApp.getInt(HashTableApp.java:28)
at hashing.HashTableApp.main(HashTableApp.java:48)
这些是我的方法定义-
public static String getString() {
String s;
try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
s = br.readLine();
}
catch(IOException e) {
s = null;
System.out.println(e);
}
return s;
}
public static int getInt() {
String s = getString();
return Integer.parseInt(s);
}
查看异常消息,看起来流在第一次调用getInt()
之后关闭,然后在尝试从命令行读取时对getInt()
的第二次调用失败。但是,我不确定为什么会这样。通常,当人们尝试从已经关闭的流中读取数据时,就会出现此问题,如先前in this question所述。
但是,就我而言,第一次调用关闭的流不会影响第二次调用,因为这是一个全新的方法调用。
在某些情况下,除了try-with-resources结构之外,这与我正在阅读的book中有关哈希的代码几乎相同。