0

我正在用 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,所以我们没问题。)

但是如果我将参数传递blahNameSurferEntryNameSurferEntry然后初始化它的参数,那我就输了blah,对吧?然后我的冲动是在方法之外初始化line为 ivar,但随后我NullPointerException再次收到消息,我又回到了开始的地方。啊!

想法?

4

2 回答 2

2

你给你的构造函数作为参数的line变量是null.

null如果您调用NameSurferEntry构造函数,请确保您不输入。

于 2012-04-15T05:36:32.247 回答
1

你的line论点是空的。这就是为什么您要花一些NullPointerException时间尝试操作line(使用indexOfand StringTokenizeronline会引发NullPointerExceptionifline为 null - 它没有什么可操作的)。

于 2012-04-15T05:41:28.930 回答