0

对于我的任务,我正在尝试将整数序列读入数组并计算有关数组的一些内容。我仅限于使用 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() 只读取第一个值而忽略其他所有值?

4

2 回答 2

4

System.in您每次都在重新打开。我不知道这是做什么的,但我认为它不会很好。

相反,您应该使用one BufferedReader,并在循环中从其中逐行读取。

于 2013-11-08T21:42:43.200 回答
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();
    }
于 2013-11-08T22:14:08.423 回答