我正在用 Java 学习 iTunes U Stanford CS106a 课程,我很喜欢它,但我对这个 Name Surfer 程序感到失望。
当我使用此代码时
public NameSurferEntry(String line) {
int endOfName = line.indexOf(" ");
name = line.substring(0,endOfName);
String newLine = line.substring(endOfName+1);
StringTokenizer tokenizer = new StringTokenizer(newLine);
if (tokenizer.hasMoreTokens()) {
name = tokenizer.nextToken();
}
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
array[i] = Integer.parseInt(tokenizer.nextToken());
}
}
我在第二行(int endOfName 等)上得到一个 Suspended/NullPointerException,上面写着“NameSurferEntry.(String) line: 16”。
如果我尝试这样做:
public NameSurferEntry(String line) {
StringTokenizer tokenizer = new StringTokenizer(line);
name = tokenizer.nextToken();
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
array[i] = Integer.parseInt(tokenizer.nextToken());
}
}
我收到 Suspended/NullPointerException 消息“StringTokenizer.(String, String, boolean) line: 182”,后跟“Source not found”。
有人对我做错了什么有任何想法吗?
更新
谢谢您的帮助。
NameSurferEntry 实际上是由另一个为 提供值的类调用的null
。但是在阅读了您的建议后,我已将其声明line
为 ivar,但在 NameSurferEntry 的主体中对其进行了初始化,从而修复了它。(在我声明和初始化line
为 ivar 之前。我不明白为什么我初始化它的地方会有所不同,但确实如此。)
下一个错误直到第 48 行!所以你可能很快就会再次收到我的来信......在我的路上,看看我是否能自己解决这个问题。再次感谢。
哎呀
没那么快。
当我line
在 NameSurferEntry 的主体中初始化一个实际的字符串时,一切正常。
问题是 NameSurferEntry 被另一种方法调用:
public NameSurferDataBase(String filename) {
try {
BufferedReader br = new BufferedReader(new FileReader(filename));
while (true) {
String blah = br.readLine();
if (blah == null) {
break;
}
NameSurferEntry entry = new NameSurferEntry(blah);
hmap.put(entry.getName(), entry);
}
br.close();
}
catch (IOException ex) {
throw new ErrorException(ex);
}
}
(这个方法又被另一个方法调用,它为它提供了一个实际的文件filename
,所以我们没问题。)
但是如果我将参数传递blah
给NameSurferEntry
,NameSurferEntry
然后初始化它的参数,那我就输了blah
,对吧?然后我的冲动是在方法之外初始化line
为 ivar,但随后我NullPointerException
再次收到消息,我又回到了开始的地方。啊!
想法?