我正在用Java编写iTunes U Stanford CS106a课程并且很喜欢它但是我正在撕毁我对这个名字冲浪者计划的评论。
当我使用此代码时
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等)上看到“NameSurferEntry。(String)line:16”的Suspended / NullPointerException。
如果我尝试这样做:
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
消息,然后我回到我开始的地方。哎呀!
思想?
答案 0 :(得分:2)
您将构造函数作为参数赋予的line
变量为null
。
如果您致电null
构造函数,请确保不输入NameSurferEntry
。
答案 1 :(得分:1)
您的line
参数为空。这就是为什么在尝试NullPointerException
时使用line
的原因(使用indexOf
而StringTokenizer
上的line
会NullPointerException
line
{{1}} {1}}为空 - 它没有任何操作)。