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)
错误原因
- 类型不匹配:声明的
LinkedList<String> list仅能存储String类型,但代码尝试向其中添加Node对象,直接触发编译报错。 - 冗余结构:已手动实现基于
Node类的自定义链表(通过head节点管理),JDK自带的LinkedList属于多余结构,完全没必要保留。 - 逻辑错误:
addGrp方法用list==null判断链表为空是错误逻辑,应检查自定义链表的头节点head==null;else分支的遍历逻辑会让start变为null,执行start.next=n1时会触发空指针异常。 - 构造函数参数顺序错误:
group构造函数参数为(leadname, grpname),但调用时传入的是(groupname, lead),导致属性赋值颠倒。 - 遍历逻辑缺陷:
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
相关产品推荐
相关产品推荐

