0

我正在尝试将变量传递coeffexpo一个名为poly. 为空时poly,存储两个变量。我的问题是 when polyis not empty 在这种情况下是 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);
    }
 }
4

3 回答 3

3

如果不看更多代码就很难确定,但是poly在迭代它时添加新元素看起来很可疑。如果你不小心,你很容易陷入无限循环。

如果在-th 索引处add(i, a)添加,则可以保证无限循环,因为您将一遍又一遍地检查相同的元素,因为当您一直在其前面插入时,它会一直向右移动。aia

于 2013-04-10T20:17:27.243 回答
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;
     }
  }
于 2013-04-10T20:18:21.093 回答
1

你的问题是

if (one.getExp() < a.getExp()) 

总是评估为真......导致无限循环,因为你永远不会达到 poly.size 每次都向 poly 添加一个。

于 2013-04-10T20:18:55.740 回答