java - 空指针异常修复 - 列表

标签 java list nullpointerexception

  public void createGraph () {
    int oldFrom = -1;
    int oldTo = -1;
    for(int i = 0; i < edges.size(); i++) {
      EdgeI e = edges.get(i);
      int from = e.from;
      int to = e.to;
      VertexI v = vertices.get(from);
      if (from == oldFrom && to == oldTo){
        vertexWeight wic = v.neighbors.get(v.neighbors.size() - 1);
        wic.w++;
      }
      else {
        v.neighbors.add(new vertexWeight (to, 1));
        oldFrom = from;
        oldTo = to;
      }
    }
  }

neighbors 是来自 VertexI 类的公共(public) Listw 是来自 vertexWeight 类的公共(public)整数。 edges 是位于我的主类中的列表。我不断收到这行代码的空指针异常:

v.neighbors.add(new vertexWeight (to, 1));

尝试了大约 15 分钟,但没有成功。我到底搞砸了什么?

java.lang.NullPointerException
    at tester.createGraph(tester.java:60)
    at tester.main(tester.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

最佳答案

简短回答

使用 vertices.get() 中的 new ArrayList() 初始化 v.neighbors

长答案

您的问题忽略了一个关键信息:您如何初始化neighbors。为什么这很重要?

参见:What is a NullPointerException, and how do I fix it?

在您的情况下,我猜测在程序运行期间 vneighbors 为空。例如,vertices.get(from) 可能返回 null,而 v.neighbors 将不起作用。或者 neighbors 为 null,并且 v.neighbors.add() 将不起作用。

瞧。您承认在初始化 VertexI 时将 neighbors 设置为 null。

解决方案是:使用 new ArrayList() 初始化,而不是 null

如果这是不可能的,或者由于某些其他原因您无法避免空指针,您可以像这样进行空指针检查:

if (v != null && v.neighbors != null) {
    v.neighbors.add(new vertexWeight (to, 1));
}

这意味着,如果 vneighbors 为空,则不要添加顶点。

但这很复杂并且容易出错。尽可能避免空指针更容易。有人会说,不惜一切代价避免它们!相反,抛出异常或返回一个“空”对象,例如 new ArrayList()

关于java - 空指针异常修复 - 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873923/

相关文章:

java - Java 服务器中的执行程序池

java - 方法不适用于接口(interface) : throw Exception or ignore silently? 的实现

java - 在 avro 文件中存储空值

C# 比较两个列表,返回列表中的新项目

java - 反序列化时保存元素在其兄弟元素之间的顺序

python - 在特定字符串后获取多个数字

java - 如何在java中显示链接列表中的项目

JavaFX 位置未设置错误消息

java - 在 onPreExecute() 内部调用时 TextView.setText() 的 NullPointerExcepction

java.lang.NullPointerException : Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference