Java代码错误链表
Java code error linked list
您好,我已经有一段时间没写 java 了,我似乎找不到这段代码有什么问题。我正在实施从链表中删除一个节点,但我的程序无法编译。我不断收到:
错误:无法从静态上下文引用的非静态变量
Node head = new Node();
我的主要方法中的所有新 Node() 实例都出错。
public class NodeDelete{
class Node {
int data;
Node next;
public Node(){ }
}
Node Delete(Node head, int position) {
// Complete this method
int index = 0;
Node current = head;
if (position == 0 ){
head = head.next;
}
else{
while (index < (position - 1)){
current = current.next;
}
current.next = current.next.next;
}
return head;
}
public static void main(String[] args) {
Node head = new Node();
head.data = 0;
Node node1 = new Node();
node1.data = 1;
Node node2 = new Node();
node2.data = 2;
head.next = node1;
node1.next = node2;
}
}
或者 使 Node
class 静态化。 或从NodeDelete
class中取出Node
class。这将解决问题。
Node
class 是 non-static inner class of NodeDelete
, 所以它就像一个成员的 NodeDelete
class。要访问静态上下文中的任何成员,需要 class 的实例。这就是为什么您会在此处收到 编译时错误。
注意:您在Node
中定义的构造函数与默认构造函数相同。所以不需要定义它。这是多余的。
使节点 class 静态化:
static class Node {
int data;
Node next;
public Node(){ } // This is same as the default constructor. So this can be remove.
}
或
从NodeDelete中取出相同的实现class。
Node
是一个非静态内部 class。因此需要包含 class 的实例来构造实例:
NodeDelete nd = ...
Node node = nd.new Node();
备选方案:
- 使
Node
成为静态内部class
- 使
Node
成为顶级class
由于在 Node
的方法中没有对 NodeDelete
的引用,我建议将 Node
设为静态。
另一个尚未给出的选项(虽然不是我最喜欢的)是实例化包含主要方法的 class 实例,然后使用它来实例化内部 class。像这样...
NodeDelete nd = new NodeDelete(...);
Node n = nd.new Node(...);
您好,我已经有一段时间没写 java 了,我似乎找不到这段代码有什么问题。我正在实施从链表中删除一个节点,但我的程序无法编译。我不断收到:
错误:无法从静态上下文引用的非静态变量
Node head = new Node();
我的主要方法中的所有新 Node() 实例都出错。
public class NodeDelete{
class Node {
int data;
Node next;
public Node(){ }
}
Node Delete(Node head, int position) {
// Complete this method
int index = 0;
Node current = head;
if (position == 0 ){
head = head.next;
}
else{
while (index < (position - 1)){
current = current.next;
}
current.next = current.next.next;
}
return head;
}
public static void main(String[] args) {
Node head = new Node();
head.data = 0;
Node node1 = new Node();
node1.data = 1;
Node node2 = new Node();
node2.data = 2;
head.next = node1;
node1.next = node2;
}
}
或者 使 Node
class 静态化。 或从NodeDelete
class中取出Node
class。这将解决问题。
Node
class 是 non-static inner class of NodeDelete
, 所以它就像一个成员的 NodeDelete
class。要访问静态上下文中的任何成员,需要 class 的实例。这就是为什么您会在此处收到 编译时错误。
注意:您在Node
中定义的构造函数与默认构造函数相同。所以不需要定义它。这是多余的。
使节点 class 静态化:
static class Node {
int data;
Node next;
public Node(){ } // This is same as the default constructor. So this can be remove.
}
或
从NodeDelete中取出相同的实现class。
Node
是一个非静态内部 class。因此需要包含 class 的实例来构造实例:
NodeDelete nd = ...
Node node = nd.new Node();
备选方案:
- 使
Node
成为静态内部class - 使
Node
成为顶级class
由于在 Node
的方法中没有对 NodeDelete
的引用,我建议将 Node
设为静态。
另一个尚未给出的选项(虽然不是我最喜欢的)是实例化包含主要方法的 class 实例,然后使用它来实例化内部 class。像这样...
NodeDelete nd = new NodeDelete(...);
Node n = nd.new Node(...);