Java代码链表错误



嗨,自从我写java已经有一段时间了,我似乎找不到这段代码有什么问题。我正在实现从链表中删除一个节点,但我的程序不会编译。我一直得到:

错误:非静态变量this不能从静态上下文中引用

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类为静态。NodeDelete类中取出Node类。这样问题就解决了。

Node类是NodeDelete非静态内部类,因此它类似于NodeDelete类的成员。要访问静态上下文中的任何成员,需要类的实例。这就是为什么你在这里得到编译时错误

注意:您在Node中定义的构造函数与默认构造函数相同。所以不需要定义它。这是多余的。

使Node类静态化:

static class Node {
  int data;
  Node next;
  public Node(){  }  // This is same as the default constructor. So this can be remove.
}

从NodeDelete类中取出相同的实现

Node是一个非静态内部类。因此,需要一个包含类的实例来构造实例:

NodeDelete nd = ...
Node node = nd.new Node();

的替代品:

  • 设置Node为静态内部类
  • 设置Node为顶级类

由于在Node的方法中没有引用NodeDelete,我建议将Node设置为静态

另一个尚未给出的选项(虽然不是我最喜欢的)是实例化包含main方法的类的实例,然后使用它来实例化内部类。像这样…

NodeDelete nd = new NodeDelete(...);
Node n = nd.new Node(...);

相关内容

  • 没有找到相关文章

最新更新