有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java新手试图找出NullPointerException和

我正在用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等)上得到一个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());
  }
}

我得到一个挂起的/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消息,我回到了开始的地方。啊

想法


共 (2) 个答案

  1. # 1 楼答案

    作为参数提供给构造函数的line变量是null

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

  2. # 2 楼答案

    您的line参数为空。这就是为什么您在尝试对line进行操作时会得到一个NullPointerException(使用indexOfStringTokenizerline进行操作时,如果line为空,则会产生一个NullPointerException,因为它没有任何操作对象)