0

我正在开发一个 Java 项目,将每个 Integer 添加到下一行中的一个,直到文件中没有要读取的行。所以为了能够添加它,我必须使用 Integer.parseInt(...) 到该行然后添加它。PS:for循环只会跳过包含文件头的两行。并且所有字符串都引用 Integer.parseInt() 接受的数字。

这是完整的异常错误:

Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at prog.Result(prog.java:93)
at prog.main(prog.java:56)

导致异常的代码是:

public static void Result() throws IOException
    {
        FileReader fileReader = new FileReader(dir+"/"+log_file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        int i;
        for (i=0;i<=2;++i)
        {
            bufferedReader.readLine();
        }
        int result =0;
        while (bufferedReader.readLine() != null)
        {
            result += Integer.parseInt(bufferedReader.readLine());

        }
        System.out.println("The Result Is : " + result);

    }
4

3 回答 3

5

我认为这是你的问题:

    while (bufferedReader.readLine() != null)
    {
        result += Integer.parseInt(bufferedReader.readLine());

    }

你在readLine()那里打了两次电话。您应该将初始结果存储在一个变量中,并重用导致parseInt()调用的结果。

于 2013-09-13T02:54:58.500 回答
5

这个块实际上是读行,而不是一行。

while (bufferedReader.readLine() != null)
{
    result += Integer.parseInt(bufferedReader.readLine());
}

while条件检查中读取最后一行时会发生错误,然后块的内部将 read null,因为没有更多行要读取。

将这样的循环编写为习惯用法:

String line;
while ((line = bufferedReader.readLine()) != null)
{
    result += Integer.parseInt(line);
}
于 2013-09-13T02:55:00.053 回答
0

首先:您应该检查文件中的数据以确保所有行都是数字。

第二:您应该尝试在下面的行中捕获

try {
    result += Integer.parseInt(bufferedReader.readLine());
} catch(Exception ex)
于 2013-09-13T02:57:40.067 回答