Xer*_*nix 5 java stack-overflow recursion tostring
我的两个toString()似乎处于无限循环中,但是我不确定是什么问题。我已经调试了几个小时,看不到任何错误的内容。
对于上下文,主要部分的相关部分是:System.out.println(class1); adminStaff1.assignInstructor(class1,教师1); System.out.println(class1);
第一个println工作,但是当我调试时,我看到一个源查找错误,然后再进行处理。第二个class1创建StackOverflowError,它是:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.lang.StringBuilder.<init>(Unknown Source)
at Instructor.toString(Instructor.java:59)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at Class.toString(Class.java:89)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at Instructor.toString(Instructor.java:59)
Run Code Online (Sandbox Code Playgroud)
类的toString是:
@Override
public String toString() {
return "Class [instructor=" + instructor + ", lectureHall="
+ lectureHall + ", currentEnrollment=" + currentEnrollment
+ ", timeSlot=" + timeSlot + ", filled=" + filled
+ ", studentList=" + studentList + "]";
}
Run Code Online (Sandbox Code Playgroud)
讲师的toString是:
@Override
public String toString() {
return "Instructor [salary=" + salary + ", classList=" + classList
+ ", openTimeSlots=" + openTimeSlots + ", "
+ super.toString() + "]";
}
Run Code Online (Sandbox Code Playgroud)
并且super.toString()是:
@Override
public String toString() {
return "[idNumber=" + idNumber + ", email=" + email
+ "]";
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么,但是adminStaff1.assignInstructor似乎也是导致该问题的原因,它是:
public void enrollStudent(Student student, Class aClass){
aClass.checkIfFilled();
if(!aClass.getFilled()){
aClass.addStudent(student);
student.addClass(aClass);
aClass.increaseEnrollment();
} else {
System.out.println("Could not add student because the class is currently full.");
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我理解问题所在,我表示衷心的感谢。谢谢。
当您呼叫时toString(),Class它会包含Instructor(和Instructor在内Class)。这是一个周期。打破它,要么
return "Instructor [salary=" + salary + /* ", classList=" + classList */
+ ", openTimeSlots=" + openTimeSlots + ", "
+ super.toString() + "]";
Run Code Online (Sandbox Code Playgroud)
要么,
return "Class [lectureHall=" + lectureHall + ", currentEnrollment="
+ currentEnrollment + ", timeSlot=" + timeSlot + ", filled=" + filled
+ ", studentList=" + studentList + "]";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4470 次 |
| 最近记录: |