簡體   English   中英

java.lang.OutOfMemoryError:Java堆空間。 從嘗試將掃描儀輸入值添加到ArrayList

[英]java.lang.OutOfMemoryError: Java heap space. From trying to add scanner input values to an ArrayList

不知道為什么會收到這個奇怪的錯誤,但是該程序也無法編譯,因此我為掃描儀創建的while循環一定有問題。 我從未見過此特定錯誤。

私有ArrayList gradeList;

public GradeDistribution() {
   this.gradeList = new ArrayList<Integer>();
}

public void addGrades(Scanner reader) {
    int grade = Integer.parseInt(reader.nextLine());
    while (true) {
        if (grade == -1) {
            this.printGrades();
            break;
        } else {
            this.gradeList.add(grade); //the error points to this line
        }
    }
}

我沒有包括printGrades()方法,但向您保證這不是問題的根源。 我不知道我在做什么錯,因為一切似乎都應該正常進行。 ArrayList已初始化,所以我知道不是那樣的...

您需要移動:

int grade = Integer.parseInt(reader.nextLine());

while循環內。

否則,您將遇到無限循環,該循環試圖將變量grade值無限地添加到gradeList 這會在每次迭代時增加分配的大小,並在超出限制時引發異常。

當您移動int grade = Integer.parseInt(reader.nextLine()); 在內部循環中,它( reader.nextLine() )將停止循環,直到用戶reader.nextLine()為止。

更改后,您的代碼將變為:

public void addGrades(Scanner reader) {
    while (true) {
        int grade = Integer.parseInt(reader.nextLine());

        if (grade == -1) {
            this.printGrades();
            break;
        } else {
            this.gradeList.add(grade); //the error points to this line
        }
    }
}

暫無
暫無

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

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