我有一个方法来初始化一个linkedList,另一个方法是在该列表上运行一些递归函数。但是,在这个相似的例子中,我试图将一个顶点添加到链表中时出错。
import java.io.*;
import java.util.*;
public class Bla<T>{
private LinkedList<T> resultList;
public LinkedList<T> experiment(T vertex){
LinkedList<T> resultList = new LinkedList<T>();
return experimentRecursive(vertex);
}
public LinkedList<T> experimentRecursive(T vertex){
resultList.add(vertex);
return resultList;
}
public static void main (String args[]){
Bla <String> hello= new Bla<String>();
System.out.println(hello.experiment("A"));
}
}
答案 0 :(得分:2)
您正在方法中初始化本地链接列表,而不是类的成员。即使在方法调用之后,resultList
仍然为null,因为它从未初始化。将代码更改为以下...
private LinkedList<T> resultList;
public LinkedList<T> experiment(T vertex){
resultList = new LinkedList<T>();
return experimentRecursive(vertex);
}
P.S。 :请参考@ JB的评论以获得更好的设计。
答案 1 :(得分:1)
做
public LinkedList<T> experiment(T vertex){
LinkedList<T> resultList = new LinkedList<T>();
return experimentRecursive(vertex);
}
您没有初始化实例字段。而是做
public LinkedList<T> experiment(T vertex){
resultList = new LinkedList<T>();
return experimentRecursive(vertex);
}
或为了更好的可读性
this.resultList = new LinkedList<T>();
答案 2 :(得分:0)
错误引用局部变量,而不是字段。
您的设计需要清楚它是否只是一个列表,它是通过传递来改变的,或者类实例是否包含列表&amp;变了。
拨打new Bla<String>().experiment("A")
只需修改&amp;返回一个本地列表,但您似乎试图将&#34; Builder&#34;基于此的语义。