Error:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Error:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

我的程序如下:

import java.util.*;

class evenNumber {
    ArrayList<Integer> arrL=new ArrayList<Integer>();

    ArrayList<Integer> saveEvenNumber(int N) {
        if(N<2)
            System.out.println("N should be greater than 2");
        else 
            for(int i=1;i<N;i++)
            {
                while(i%2==0)
                {
                    arrL.add(i);
                }
            }

        return arrL;
    }

    void printEvenNumber() {
        Iterator<Integer> tr=arrL.iterator();
        while(tr.hasNext())
            {
                System.out.print(tr.next());
                System.out.print("*2, ");
            }
    }
}


public class First {
    public static void main(String args[]) {
        evenNumber eN=new evenNumber();
        eN.saveEvenNumber(13);
        eN.printEvenNumber();
    }
}

我收到以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.grow(Unknown Source)
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at list.evenNumber.saveEvenNumber(First.java:15)
    at list.First.main(First.java:35)`

我已经在 运行 > 运行 配置 > Arguments 中更改了大小,如其他帖子中提到的相同错误,但后来我也得到了同样的错误。

我该怎么办?

i == 2时,while循环将永远执行,这就是抛出java.lang.OutOfMemoryError的原因。

arrL.add(i);后添加一个break;

正如 Thomas 评论的那样,在这里使用 if 语句 更合适。

顺便说一句,java 命名参考Naming Conventions。对于您的情况,class 名称的首字母应大写。使用 EvenNumber 而不是 evenNumber.