【发布时间】:2016-11-24 15:24:47
【问题描述】:
我的程序如下:
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)`
我已经更改了 Run > Run configuration > Arguments 中的大小,正如其他帖子中提到的相同错误但我也遇到了相同的错误。
我该怎么办?
【问题讨论】:
-
您不断在
while(i%2==0) { arrL.add(i); }的列表中添加元素。与您的内存设置无关,这将迟早会耗尽内存。 -
除了 Andreas 的评论,我猜你想用
if(i%2==0)代替。 -
您在
printEvenNumber中的迭代方式是一种方法,但简单的for循环会更易读:for (Integer i : arrL) { System.out.print(i); System.out.print("*2, "); }也可以这样做。
标签: java out-of-memory