调用toString方法第二次尝试时出现java空指针异常
我被指派用add
、addAtFirst
和toString
方法创建一个单独的LinkedList
类。除非我再次调用toString
方法,否则一切都正常
这是包含方法的完整类:
public class SingleList {
Node head;
int size;
public static class Node{
int data;
Node next;
public Node(int data) {
this.data=data;
}
}
public void add(int data) {
size++;
if(head==null) head= new Node(data);
else {
Node n= new Node(data);
Node temp= head;
while(temp.next!=null) {
temp= temp.next;
}
temp.next=n;
}
}
public int size() {
return size;
}
public boolean isEmpty() {
return head==null;
}
public void insertAtHead(int data) {
size++;
Node n= new Node(data);
n.next=head;
head=n;
}
@Override
public String toString(){
if(size==0) return"[]";
StringBuilder sb= new StringBuilder().append("[");
for(int i=0;i<size-1;i++)
{ sb.append(head.data+",");
head=head.next;
}
return sb.append(head.data+"]").toString();
}
}
这是主体内的驾驶员等级代码:
java
SingleList sl= new SingleList();
System.out.println(sl);
for(int i=0;i<=10;i++) sl.add(i);
System.out.println(sl);
System.out.println(sl);
输出是这样的
[]
[0,1,2,3,4,5,6,7,8,9,10]
然后是一个空指针异常,并为异常显示一个sourece行,这是这一行sb.append(head.data+",");
# 1 楼答案
您的
toString()
方法在第一次调用时将成员head
设置为null:在第二次调用
toString()
时,成员head
仍然为空。在第一次通过循环时,head.data
将导致NullPointerException相反,可以使用局部变量
如果你这么做了,你可以迭代节点,而不是它们的索引: