java.lang.OutOfMemoryError:Java堆空间.从尝试将扫描仪输入值添加到ArrayList

use*_*421 0 java arraylist out-of-memory

不知道为什么我得到这个奇怪的错误,但是程序也没有编译,所以我为扫描器制作的while循环一定有问题.我从未见过这个特别的错误.

private 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有包含printGrades()方法,但我向你保证它不是问题的根源.我不知道我做错了什么,因为一切看起来都应该有效.ArrayList已初始化,所以我知道它不是......

Ler*_*eri 5

你需要搬家:

int grade = Integer.parseInt(reader.nextLine());
Run Code Online (Sandbox Code Playgroud)

while循环.

否则,你有尝试无限增加变量的值无限循环gradegradeList.这会增加每次迭代的分配大小,并且当超过限制时抛出异常.

当你进入int grade = Integer.parseInt(reader.nextLine());内部循环时,it(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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)