簡體   English   中英

toStrings()的堆棧溢出錯誤(java)

[英]Stack Overflow Error with toStrings() (java)

我的兩個toString()似乎處於無限循環中,但我不確定問題是什么。 我已經調試了幾個小時了,看不出任何錯誤。

對於上下文,main的相關部分是:System.out.println(class1); adminStaff1.assignInstructor(class1,instructor1); 的System.out.println(1類);

第一個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)

Class的toString是:

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

教師的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包含Class )。 這是一個循環。 打破它,或者

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

要么,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM