我正在尝试将变量coeff
和expo
传递给名为poly
的arraylist。当poly
为空时,将存储两个变量。我的问题是当poly
不为空时,在这种情况下是else语句,编译器会冻结并抛出以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我不知道的else语句是否有问题。
public void insert(int coeff, int expo) {
Term a = new Term(coeff, expo);// Creates a new Term object with passed #'s
if (poly.isEmpty()) {
poly.add(a);
} else {
for (int i = 0; i < poly.size(); i++) {
Term one = poly.get(i);
if (one.getExp() < a.getExp()) {
poly.add(i, a);
}
}
poly.add(a);
}
}
答案 0 :(得分:3)
如果没有看到更多代码,很难确定,但是如果你在迭代它时向poly
添加新元素,那就好了。如果你不小心,你可能很容易陷入无限循环。
如果add(i, a)
在a
个索引处添加了i
,那么您可以保证无限循环,因为它会一直反复检查相同的元素,因为它会不断变换在你面前插入a
时,向右移动。
答案 1 :(得分:2)
这是因为,每次向ArrayList
poly
添加新元素时,ArrayList
的大小都会增加,这会导致无限循环。你应该尝试这样的事情:
else {
int size = poly.size();//store the size of ArrayList poly in a variable so that the for loop is definite.
for (int i = 0; i < size; i++) {
Term one = poly.get(i);
if (one.getExp() < a.getExp()) {//check this condition..I guess it is always true for each iteration.
poly.add(i, a);
i++;//after adding an element at index i increment it by 1
size = size + 1;
}
}
答案 2 :(得分:1)
你的问题是那个
if (one.getExp() < a.getExp())
始终求值为true ...导致无限循环,因为每次向poly进行加法时,都不会达到poly.size。