如何在线程“main”java.lang.NullPointerException中修复Exception

时间:2015-10-08 03:23:17

标签: exception input nullpointerexception compiler-errors output

运行代码时出现此错误,但编译时没有错误。

Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(StringTokenizer.java:199)
at java.util.StringTokenizer.<init>(StringTokenizer.java:221)
at WillinsLaMarkusFileInputOutput.main(WillinsLaMarkusFileInputOutput.java:23)

这是我的完整代码

import java.io.*;

public class WillinsLaMarkusFileInputOutput {

    public static void main(String[] args) throws IOException {
        /* open the files */
        // Scanner sc = new Scanner(System.in);
        BufferedReader r = new BufferedReader(new FileReader("input.txt"));
        BufferedWriter w = new BufferedWriter(new FileWriter("output.txt"));

        float[] values = new float[10];
        String str = r.readLine();
        int i = 0;
        float sum = 0.0f, avg = 0.0f;
        /* tokenize the string into floats separated by spaces */
        java.util.StringTokenizer tk = new java.util.StringTokenizer(str, " ");
        while (tk.hasMoreElements()) {
            values[i] = Float.valueOf(tk.nextToken()).floatValue();
            /* compute sum */
            sum += values[i];
            i++;
        }

        /* calculate average */
        avg = sum / 10.0f;

        /* write results to output.txt */
        w.write("Sum: " + sum);
        w.newLine();
        w.write("Average: " + avg);
        w.flush();

        /* close the files */
        r.close();
        w.close();
    }
}

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

例外情况来自这一行:

java.util.StringTokenizer tk = new java.util.StringTokenizer(str, " ");

首先让我们在这个构造函数抛出NullPointerException时读取documentation

  

public StringTokenizer(String str, String delim)

     

抛出:

     

NullPointerException - 如果strnull

精细。这意味着strnull。此行中分配了str

String str = r.readLine();

现在,您应该在r.readLine()可能返回null时阅读文档:

  

返回:

     

包含该行内容的String,不包括任何行终止字符;如果已到达流末尾,则为null

因此它表示已到达文件末尾。因为这是从该文件中读取内容的第一次尝试,所以您似乎正在读取一个空文件。

一般来说,仔细阅读文档可能会非常有助于理解您的程序无效的原因。