java创建链表异常解决

问题解决

问题解释

该错误表明,在试图创建非静态类实例时,没有正确引用外部类的实例。
源代码如下

package vjudge;

import java.util.Scanner;

public class test {

    // 节点类
    public class Node {
        int data;
        Node next;

        Node(int data) {
            this.data = data;
            this.next = null;
        }
    }

    // 链表类
    public class Link {
        private Node head;

        Link() {
            this.head = null;
        }

        public void add(int data) {
            if (this.head == null) {
                Node p = new Node(data);
                head = p;
            } else {
                Node p = new Node(data);
                head.next = p;
            }
        }
    }

    public static void main(String[] args) {
        
        Link link = new Link(); 
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int p = scanner.nextInt();
        
        for (int i = 1; i <= n; i++) {
            link.add(i); 
        }

    }
}

问题分析

报错来源是Link link = new Link(); 由于非静态内部类依赖于外部类实例,Link是linklist的非静态内部类,所以它和linklist绑定,所以首先应该创建linklist的实例。

但是可以发现,Link类的add方法中,Node可以直接通过new实现,因为Link类也是linklist的非静态内部类,所以Link类的实例已经隐式地拥有了对linklist实例地调用。因为Node是linklist的内部类,并且Link已经具备了创建Node的上下文(即linklist的实例)

问题解决

修改代码如下

linklist list = new linklist();  // 先创建外部类的实例
Link link = list.new Link();     // 通过外部类实例来创建内部类对象
posted @ 2024-08-22 11:05  Sun-Wind  阅读(6)  评论(0编辑  收藏  举报