gpt4 book ai didi

添加到链接列表时出现 java.lang.stackoverflowerror

转载 作者:行者123 更新时间:2023-12-01 16:50:43 25 4
gpt4 key购买 nike

我在尝试将对象添加到链接列表时遇到此问题(java util)我有一个 DoctorPatient 类,它们都继承自抽象类 Person

public abstract class Person {
private LinkedList<Appointment> scheduledAppointments = new LinkedList<Appointment>();

//irrelevant code

public boolean addAppointment(Appointment appointment){
return this.scheduledAppointments.add(appointment);
}

参与者属性的链接列表中有一名医生和一名患者。

public class Appointment {
private ArrayList<Person> participants = new ArrayList<Person>();
...

public Appointment(Person doctor, Person patient, int day, int month, int year, double startHour, Procedure procedure) {
this.participants.add(doctor);
this.participants.add(patient);
...
}

public void addAppointmentToParticipants(){
for (Person person : participants) {
person.addAppointment(this);
}
}

当我尝试向每个参与者添加约会时出现问题:方法抛出“java.lang.StackOverflowError”异常。无法评估 Appointment.toString()

当我调试它时,我可以看到异常发生在LinkedList.java上,尤其是size++系列

   void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}

我不明白为什么我会遇到这个问题,“toString”与它有什么关系......

最佳答案

根据错误消息中的 toString(),它看起来像是 Appointment 中的 toString() 嵌入了字符串表示形式Person 的,但是 Person 中的任何 toString()Appointment 的作用都是相同的。每当您调用 toString() 时,这都会导致 StackOverflowError ,因为字符串会不断扩展(并且这里的关系是双向的)。

这也会导致在不遇到错误的情况下打印出 LinkedList 是不可能的。

解决方案是使其中一个类的 toString() 嵌入另一个类的 toString()。更好的是,您应该重新考虑您的模型并确定您是否真的需要这种双向关系。

关于添加到链接列表时出现 java.lang.stackoverflowerror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61696196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com