Integer.parseInt()抛出NumberFormatException

时间:2013-11-08 21:28:15

标签: java

对于我的任务,我试图将一系列整数读入数组并计算一些关于数组的东西。我限制使用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

2 个答案:

答案 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();
    }