Java中LinkedList处使用泛型的Null指针异常
public class List_manager<E> {
Entry<E> first;
Entry<E> last;
public void add(E element) {
Entry<E> e=new Entry(element,last);
if (first==null) first=last;
}
public E get() {
Entry<E> temp=first;
first=first.next;
return temp.data;
}
public boolean isEmpty() { return first==null; }
private static class Entry<E> {
Entry<E> next;
E data;
public Entry(E element,Entry<E> to) {
data=element;
next=to;
to=this;
}
}
}
//now the main class
正在尝试创建linkedlist
public class Main {
public static void main(String[] args) {
Point p1=new Point(0,0); //
Point p2=new Point(12,5);
Point p3=new Point(43,12);
List_manager<Point> l=new List_manager<Point>();
l.add(p1);
l.add(p2);
l.add(p3);
System.out.println(l.get()); // here is an error occurs
System.out.println(l.get());
}
}
// Point
简单一点
public class Point {
double x;
double y;
public Point(double x,double y) {
this.x=x;
this.y=y;
}
public String toString() {
return "("+Double.toString(x) + " , " + Double.toString(y) + ")";
}
}
# 1 楼答案
在
add
方法中,您可以执行以下操作:但是
last
永远不会初始化。它总是null
,因此first
就是null
当你调用
get
方法时,你应该:因为
first
是null
,所以你得到NullPointerException
查看代码的这一部分:
最后一句
to = this
没有任何作用。您并没有像预期的那样修改last
编辑-
您应该在
add
方法中更新last
:# 2 楼答案
变量
last
和first
从未初始化:因此,在
get()
方法中,您将在这一行捕获一个nullPointerException:# 3 楼答案
最后一个是没有设定。它将始终为空。所以第一个总是空的。当你打电话过来时:
您正试图从空对象中获取下一个值