我最近开始学习Java,我最后一件事就是通用编程和现在的链表。现在,我正在尝试将链接列表中的节点类实现为通用,但我遇到了一些麻烦。我正在尝试声明一个toString
方法,该方法可以遍历此链接列表并打印其元素,但每次调用NullPointerException
时我都会收到link.toString()
并且我对此感到困惑为什么我收到这个错误。我知道我toString
方法的格式效果不尽如人意,但我试图按照我的书中说明操作。我正在展示我的Node
课程和应用程序。
public class GenericNode<E> {
private E data;
private GenericNode<E> link;
public GenericNode(E intialData, GenericNode<E> initialLink){
data=intialData;
link=initialLink;
}
public GenericNode<E> addNodeAfter( E element ) {
link = new GenericNode<E>( element, link );
return link;
}
public String toString(){
String field1=" ";
String field2=" ";
String result=" ";
if(data==null){
field1="dummy";
System.out.println("in dummy");
}
field1="Data: "+ data.toString()+ "\n";
if(link==null){
field2="null in tail!";
System.out.println("in tail");
}
field2="link: data: "+link.data.toString() ;
if(link!=null){
result=field1+field2+link.toString();
}
return field1+field2;
}
}
public class NodeAppilication {
public static void main(String[] args){
GenericNode<String> head=new GenericNode<String>("Paul", null);
GenericNode<String> tail=new GenericNode<String>("Saul",head.addNodeAfter("Saul"));
//figure 1
System.out.print(head.toString());
//figure2
tail.toString();
GenericNode<String> dummy=new GenericNode<String>(null,head);
}
}
答案 0 :(得分:1)
您对null
的检查缺少else
:
if(data==null){
field1="dummy";
System.out.println("in dummy");
} else { // <<== Add an "else" here
field1="Data: "+ data.toString()+ "\n";
}
if(link==null){
field2="null in tail!";
System.out.println("in tail");
} else { // <<== And here...
field2="link: data: "+link.data.toString();
}
目前,您的代码会检查null
,将field1
和field2
的值设置为默认值,然后立即尝试取消引用data
或{{{ 1}},导致空指针异常。