java - toStrings() 的堆栈溢出错误 (java)

标签 java recursion tostring stack-overflow

我的两个 toString() 似乎处于无限循环中,但我不确定问题出在哪里。我已经调试了几个小时,看不出有什么问题。

对于上下文,主要的相关部分是: System.out.println(class1); adminStaff1.assignInstructor(class1, instructor1); 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)

类的 toString 是:

@Override
public String toString() {
    return "Class [instructor=" + instructor + ", lectureHall="
            + lectureHall + ", currentEnrollment=" + currentEnrollment
            + ", timeSlot=" + timeSlot + ", filled=" + filled
            + ", studentList=" + studentList + "]";
}

Instructor 的 toString 是:

@Override
public String toString() {
    return "Instructor [salary=" + salary + ", classList=" + classList
            + ", openTimeSlots=" + openTimeSlots + ", "
            + super.toString() + "]";
}

super.toString() 是:

@Override
public String toString() {
    return "[idNumber=" + idNumber + ", email=" + email
            + "]";
}

我不确定为什么,但 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.");
    }
}

如果有人能帮助我理解问题所在,我将不胜感激。谢谢。

最佳答案

当您在 Class 上调用 toString() 时,它包括 Instructor(而 Instructor 包括)。这是一个循环。打破它,要么

return "Instructor [salary=" + salary + /* ", classList=" + classList */
        + ", openTimeSlots=" + openTimeSlots + ", "
        + super.toString() + "]";

或者,

return "Class [lectureHall=" + lectureHall + ", currentEnrollment=" 
        + currentEnrollment + ", timeSlot=" + timeSlot + ", filled=" + filled
        + ", studentList=" + studentList + "]";

关于java - toStrings() 的堆栈溢出错误 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541775/

相关文章:

java - 如何在Java中将小数点四舍五入到3位,这样即使它是一位数字,.000也应该出现在值的末尾

java - 如何修复错误: Unnecessarily replacing a task that does not exist has been deprecated

parsing - 使用从右到左的解析器绕过左递归

java - 在这个例子中如何使用toString?

c# - 最有效的 Dictionary<K,V>.ToString() 格式?

java - 如何将 Camel 属性加载到 Bean 中?

java - Swing - 启动浏览器并在用户关闭时收听

php - 具有嵌套节点的递归数组解析

scala - 为什么函数不是尾递归的?

c# - 覆盖类的 ToString 函数