如何按降序将术语复制到列表中?

时间:2013-04-10 20:14:51

标签: java

我正在尝试将变量coeffexpo传递给名为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);
    }
 }

3 个答案:

答案 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。