You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java同一包下调用createLL()报未定义错误的原因

问题原因及解决办法

报错原因

你在LinkedListUse的main方法里直接写createLL(),Java会默认在当前类(LinkedListUse)中查找这个方法,但createLL()是CreateAndPrintLL类的非静态实例方法,不属于LinkedListUse。哪怕两个类在同一个包下,也不能直接跨类调用非静态方法——非静态方法必须通过所属类的对象才能调用。

解决办法

有两种可行的修改方式:

方式一:创建CreateAndPrintLL的实例对象调用方法

修改LinkedListUse的main方法,先实例化CreateAndPrintLL类,再通过对象调用方法:

package linkedlists;

public class LinkedListUse {

    public static void main(String[] args) {
        // 创建CreateAndPrintLL类的实例
        CreateAndPrintLL llTool = new CreateAndPrintLL();
        Node head = llTool.createLL();
        llTool.printLL(head);
    }

}

方式二:将方法改为静态方法调用

如果不想创建对象,可以把CreateAndPrintLL里的createLL()和printLL()改成静态方法,这样就能直接通过类名调用:
修改CreateAndPrintLL类:

package linkedlists;

import java.util.Scanner;

public class CreateAndPrintLL {
    
    // 改为静态方法
    public static Node createLL() {
        Scanner sc=new Scanner(System.in);
        int data=sc.nextInt();
        Node head=null;
        while (data!=-1) {
            Node currentNode=new Node(data);
            if(head==null) {
                head=currentNode;
            }
            else {
                Node tail=head;
                while(tail.next!=null) {
                    tail=tail.next;
                }
                tail.next=currentNode;
            }
            data=sc.nextInt();
        }
        sc.close(); // 关闭Scanner避免资源泄漏
        return head;
    }
    
    // 改为静态方法,同时修复输出和循环问题
    public static void printLL(Node head) {
        Node temp=head;
        while(temp!=null) {
            System.out.print(temp.data + " "); // 原代码输出temp.next是错误的,应该输出节点数据
            temp = temp.next; // 原代码缺少这一行,会导致死循环
        }
        System.out.println();
    }
    
}

然后修改LinkedListUse的调用代码:

package linkedlists;

public class LinkedListUse {

    public static void main(String[] args) {
        Node head = CreateAndPrintLL.createLL();
        CreateAndPrintLL.printLL(head);
    }

}

额外提示

原代码的printLL()方法有两个小问题:

  1. 输出语句写的是System.out.print(temp.next);,这会打印Node对象的内存地址,不是节点存储的数据,应该改成System.out.print(temp.data + " ");
  2. 循环体内没有移动temp指针(temp = temp.next;),会导致死循环,必须加上这一行。

内容的提问来源于stack exchange,提问作者sushma jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:42