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

Java中LinkedList<String>添加Node对象的编译错误求助

解决存储Group的链表编译错误问题

编译错误详情

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method add(String) in the type LinkedList<String> is not applicable for the arguments (LinkedListDemo.Node)
	at LinkedListDemo.addGrp(LinkedListDemo.java:67)
	at LinkedListDemo.main(LinkedListDemo.java:124)

错误原因

  1. 类型不匹配:声明的LinkedList<String> list仅能存储String类型,但代码尝试向其中添加Node对象,直接触发编译报错。
  2. 冗余结构:已手动实现基于Node类的自定义链表(通过head节点管理),JDK自带的LinkedList属于多余结构,完全没必要保留。
  3. 逻辑错误:addGrp方法用list==null判断链表为空是错误逻辑,应检查自定义链表的头节点head==null;else分支的遍历逻辑会让start变为null,执行start.next=n1时会触发空指针异常。
  4. 构造函数参数顺序错误:group构造函数参数为(leadname, grpname),但调用时传入的是(groupname, lead),导致属性赋值颠倒。
  5. 遍历逻辑缺陷:display方法的循环条件会漏掉最后一个节点,allgrp方法的内层循环逻辑错误,会导致节点遍历越界。

修正方案及完整代码

import java.util.Scanner;

public class LinkedListDemo {
    class Group {
        String leadname;
        String[] members = new String[8];
        String grpname;

        // 修正构造函数参数顺序,匹配调用逻辑
        public Group(String grpname, String leadname) {
            this.grpname = grpname;
            this.leadname = leadname;
        }
    }

    // 移除多余的LinkedList<String> list
    Scanner scn = new Scanner(System.in);
    Node head = null;

    static class Node {
        Group data;
        Node next = null;

        Node(Group g) {
            this.data = g;
        }

        Node() {}

        Node(Group g, Node next) {
            this.data = g;
            this.next = next;
        }
    }

    public void addGrp() {
        scn.nextLine(); // 消费sc.nextInt()遗留的换行符
        try {
            // 修正判断条件:检查自定义链表的头节点是否为空
            if (head == null) {
                System.out.println("enter the name of your project group");
                String groupname = scn.nextLine();
                System.out.println("Enter Group lead Name");
                String lead = scn.nextLine();
                Group grp1 = new Group(groupname, lead);
                System.out.println("members are");

                for (int i = 0; i < 8; i++) {
                    grp1.members[i] = scn.nextLine();
                }

                Node n1 = new Node(grp1, null);
                head = n1;
            } else {
                // 修正遍历逻辑:找到最后一个节点(next为null的节点)
                Node start = head;
                while (start.next != null) {
                    start = start.next;
                }
                System.out.println("enter the name of your project group");
                String groupname = scn.nextLine();
                System.out.println("Enter Group lead Name");
                String lead = scn.nextLine();
                Group grp1 = new Group(groupname, lead);
                System.out.println("members are  ");

                for (int i = 0; i < 8; i++) {
                    grp1.members[i] = scn.nextLine();
                }
                Node n1 = new Node(grp1, null);
                start.next = n1;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 修正display方法的循环条件,遍历所有节点
    public void display() {
        Node start = head;
        while (start != null) {
            Group g1 = start.data;
            System.out.println("Group Name = " + g1.grpname + "  Leader Name = " + g1.leadname);
            for (int i = 0; i < 8; i++) {
                System.out.println(g1.members[i]);
            }
            start = start.next;
        }
    }

    public static void main(String arg[]) {
        LinkedListDemo ll = new LinkedListDemo();
        int ch;
        Scanner sc = new Scanner(System.in);

        do {
            System.out.println("\n1.addGrp\n2.display\n3.displayallgrps\n0.Exit");
            ch = sc.nextInt();
            switch (ch) {
                case 1:
                    ll.addGrp(); // 不需要传递Scanner,直接用类内的scn
                    break;
                case 2:
                    ll.display();
                    break;
                case 3:
                    ll.allgrp();
                    break;
                case 0:
                    ll.exit();
                    break;
            }

        } while (ch != 0);

        sc.close();
        ll.scn.close(); // 关闭类内的Scanner
    }

    // 修正allgrp方法的遍历逻辑
    public void allgrp() {
        Node current = head;
        while (current != null) {
            Group g = current.data;
            System.out.println("Group Name: " + g.grpname + ", Leader: " + g.leadname);
            System.out.print("Members: ");
            for (String member : g.members) {
                System.out.print(member + " ");
            }
            System.out.println();
            current = current.next;
        }
    }

    public void exit() {
        System.out.println("thanks for using the code!!!");
    }
}

关键修正点总结

  • 移除冗余的LinkedList<String> list,完全基于自定义Node和head实现链表
  • 修正链表为空的判断条件,改为检查head==null
  • 修复添加节点时遍历到最后一个节点的逻辑,避免空指针
  • 修正Group构造函数的参数顺序,确保属性赋值正确
  • 修复display和allgrp方法的遍历逻辑,保证所有节点都能被访问
  • 统一Scanner的使用,避免多个实例导致的输入问题

内容的提问来源于stack exchange,提问作者Kochi_20_Gaurav Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:41:57