我正在尝试创建一个链接列表。这是我的代码。
public class Node{
private String element;
private Node next;
public Node(String element,Node next){
this.element=element;
this.next=next;
}
public Node(String element){
this(element,null);
}
public void setElement(String newElem){
element=newElem;
}
public void setNext(Node newNext){
next=newNext;
}
public String getElement(){
return element;
}
public Node getNext(){
return next;
}
}
public class SLinkedList{
protected Node head;
protected long size;
public SLinkedList(){
head=null;
size=0;
}
public void addElem(String e){
v=new Node(e,head);
v.setElement(e);
v.setNext(head);
head=v;
size++;
System.out.println(v.getElement());
}
public static void main (String args[]){
SLinkedList l=new SLinkedList();
l.addElem("Element");
//System.out.println(l.getElement());
}
}
我的问题是我何时设置
public void addElem(String e){
v=new Node(e,head);
v.setElement(e);
v.setNext(head);
head=v;
它会出错。但是如果我将addItem更改为
public void addElem(String e){
Node v=new Node(e,head);
head=v;
size++;
System.out.println(v.getElement());
}
这很好。我需要通过构造函数调用吗?设置方法的重点是什么?
还有一种方法可以打印出其他元素,其中包含System.out.println(v.getElement());
内的addElem()
答案 0 :(得分:1)
您的问题是您没有声明第一个代码中v
的含义,而在第二个代码中您明确声明了它。
v=new Node(e,head);
由于您之前未定义v
,因此JVM不知道v
是什么
Node v=new Node(e,head);
这告诉JVM v
的类型为Node
。
构造函数的关键在于您可以一次性设置所有变量,而不是使用多个setter方法。您可以随时使用单独的setter方法,只要它们是公开的
您设置代码的方式,您将始终致电getElement()
打印该值。
答案 1 :(得分:1)
public void addElem(String e){
v=new Node(e,head);
v.setElement(e);
v.setNext(head);
head=v;
在上面的代码中,v是未定义的..那么它如何编译。