我对以下程序的输出有疑问。输出为null。这也是我的想法。我想它,因为显示之前调用的方法只是修改头部的副本而不是头部本身。我假设我可以使用this.head =这对吗?
下面是代码:
public class List {
private Node head;
public List (){
int max=3;
int i;
head=null;
Node aNode=new Node(0);
for (i=0; i<max; i++) {
aNode.setNum(i);
add (aNode);
aNode.setNext(null);
}
}
public void add(Node aNode) {
Node temp;
if(head==null)
head=aNode;
else {
temp=head;
while(temp.getNext()!=null)
temp=temp.getNext();
temp.setNext(aNode);
}
}
public void display() {
Node temp=head;
while(temp!=null) {
System.out.println(temp.getNext());
temp=temp.getNext();
}
}
}
public class Node {
private int num;
private Node next;
public Node (int n) {num=n; next=null;}
public int getNum() {return num;}
public void setNum(int n) {num=n;}
public void setNext(Node n) {next=n;}
public Node getNext() {return next;}
}
public class Driver {
public static void main(String args[]) {
List aList=new List();
aList.display();
}
}
答案 0 :(得分:2)
add
依赖于接收新节点,其中next
为空。所以在for循环中移动Node aNode = new Node();
。
一些卫生言论。
current
代替temp
或其他任何内容。答案 1 :(得分:1)
在我回答你的问题之前,这是一份附注......
我在思考它,因为在显示之前调用的方法只是修改头部的副本而不是头部本身。
这是不正确的。
这就是为什么......
public void display() {
// Basically, this says, make temp a REFERENCE of head...NOT A COPY!!!!
Node temp=head;
while(temp!=null) {
System.out.println(temp.getNext());
temp=temp.getNext();
}
}
现在,为了回答你的问题,temp为null的原因是因为head为null。 head为null的原因是因为你永远不会初始化它。
从你的构造函数......
public List (){
int max=3;
int i;
// Here you're saying "set head to null".
// So when you call display, head is NULL. You MUST initialize this.
head=null;
Node aNode=new Node(0);
for (i=0; i<max; i++) {
aNode.setNum(i);
add (aNode);
aNode.setNext(null);
}
}
答案 2 :(得分:0)
从构造函数中查看此代码:
Node aNode=new Node(0);
for (i=0; i<max; i++) {
aNode.setNum(i);
add (aNode);
aNode.setNext(null);
}
您创建一个新节点,然后继续尝试将该节点添加到列表中。你需要第一行在for循环中,所以你创建了很多节点。构造函数完成后,您的列表只包含一个节点,值为3.然后,在display()
中:
System.out.println(temp.getNext());
首先在第一个节点上调用getNext()
。由于只有一个节点,getNext()
会返回null
,这就是您打印出来的内容。你应该用
System.out.println(temp);
该错误与this
关键字完全无关。您只需要this.foo
(当foo
是您班级的某个数据成员时),以便在您拥有成员和本地变量或具有相同名称的参数时消除歧义。