运行代码时出现此错误,但编译时没有错误。
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();
}
}
有关如何解决此问题的任何建议?
答案 0 :(得分:0)
例外情况来自这一行:
java.util.StringTokenizer tk = new java.util.StringTokenizer(str, " ");
首先让我们在这个构造函数抛出NullPointerException
时读取documentation:
public StringTokenizer(String str, String delim)
抛出:
NullPointerException
- 如果str
是null
精细。这意味着str
是null
。此行中分配了str
:
String str = r.readLine();
现在,您应该在r.readLine()
可能返回null
时阅读文档:
返回:
包含该行内容的
String
,不包括任何行终止字符;如果已到达流末尾,则为null
因此它表示已到达文件末尾。因为这是从该文件中读取内容的第一次尝试,所以您似乎正在读取一个空文件。
一般来说,仔细阅读文档可能会非常有助于理解您的程序无效的原因。