对于我的任务,我试图将一系列整数读入数组并计算一些关于数组的东西。我限制使用InputStreamReader和BufferedReader来读取文件,Integer.parseInt()在第一行读取后抛出NumberFormatException。
如果我通过键盘单独输入每个数字,一切都有效,但如果我尝试直接从文件中读取,它根本不起作用。
这是迄今为止的代码
int[] array = new int[20];
try {
int x, count = 0;
do{
x = Integer.parseInt((new BufferedReader(new InputStreamReader(System.in)).readLine()));
array[count] = x;
count++;
}
while (x != 0);
}
catch (IOException e){
System.out.println(e);
}
catch (NumberFormatException e){
System.out.println(e);
}
要测试的案例是
33
-55
-44
12312
2778
-3
-2
53211
-1
44
0
当我尝试复制/粘贴整个测试用例时,程序只读取第一行然后抛出 NumberFormatException异常。为什么readLine()只读取第一个值并忽略其他所有内容?s
答案 0 :(得分:4)
您每次都重新开启System.in
。我不知道这是做什么的,但我认为它不会很好。
相反,您应该使用一个 BufferedReader
,并在循环中逐个读取行。
答案 1 :(得分:1)
我认为这种情况发生的方式是你创建一个阅读器,阅读一行,然后在下一次迭代中你创建一个新的,它是空的但仍然试图读取,因此它读取“”,传递它到解析器和Integer.parseInt()
抛出NumberFormatException,因为它无法解析。正确的方法是:
int[] array = new int[20];
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
int x, count = 0;
do {
String s = reader.readLine();
x = Integer.parseInt(s);
array[count] = x;
count++;
}
while (x != 0);
} catch (IOException | NumberFormatException e) {
e.printStackTrace();
}