【问题标题】:How to fix Exception in thread "main" java.lang.NullPointerException如何修复线程“main”java.lang.NullPointerException中的异常
【发布时间】:2016-01-05 12:01:39
【问题描述】:

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

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

关于如何解决这个问题的任何建议?

【问题讨论】:

    标签: exception input nullpointerexception compiler-errors output


    【解决方案1】:

    异常来自这一行:

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

    所以首先让我们阅读documentation,这个构造函数可能会抛出NullPointerException

    public StringTokenizer(String str, String delim)

    投掷:

    NullPointerException - 如果strnull

    很好。这意味着strnullstr 分配在这一行:

    String str = r.readLine();
    

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

    返回:

    String 包含行的内容,不包括任何行终止字符,或 null(如果已到达流的末尾)

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

    一般来说,仔细阅读文档可能会极大地帮助您理解您的程序为什么不起作用。

    【讨论】:

    • 你是说我应该在“input.txt”中添加一些代码。文件 ?如果文件是 txt 而不是 java 类型的文件,那将如何工作?
    猜你喜欢
    • 2012-12-09
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多