使用ArrayList get(i)为创建对象提供参数不起作用

时间:2013-10-12 13:01:50

标签: java arraylist

我有这个问题。我正在创建一个多项式程序,我可以在其中减去,加法和乘法。

但是我遇到了这个错误,我无法确切地指出,为什么会发生这种情况。

首先我有我的Polynomial.java,我创建了两个输入的arraylist,然后我根据指数对它们进行排序,然后我遍历这个列表,如果指数匹配,则基于添加创建一个新对系数和使用原始指数。

public Polynoom subtract(Polynoom that) {
    Polynoom subtract = new Polynoom(); 
    subtract.termen.addAll(that.termen);
    for (int i = 0; i < subtract.termen.size(); i++) {
        subtract.termen.get(i).coef = subtract.termen.get(i).coef * -1; 
    }
    subtract.termen.addAll(this.termen);
    Collections.sort(subtract.termen);
    subtract.removeDoubles(); 
    return subtract; 
}

这将创建一对带有double和整数的对列表。例如:

-1.0 2
-1.0 1
 1.0 1
 2.0 0 

然后我有一个方法,它将寻找具有相同指数的对,如果是,那么它将添加系数并获取第一对的指数。

    private void removeDoubles() {

    for (int i = 0; i < this.termen.size() - 1; i++) {
        if (this.termen.get(i).exponent == this.termen.get(i + 1).exponent) {
            this.termen.set(i, new Pair((this.termen.get(i).coef + this.termen.get(i + 1).coef), (this.termen.get(i).exponent)));
            this.termen.remove(i + 1); 
            i --; 
        }       
    }
}

然而,不知怎的,我在新对中传递的第二个参数不起作用。

例如,如果我将新配对更改为:

this.termen.set(i, new Pair(13, 2));
result difference: 1.0x^2 + 13.0x^2 + 2.0 (this is correct)

如果我例如将新配对更改为:

this.termen.set(i, new Pair(13, this.termen.get(i).exponent);
result difference: -1.0x^2 + x^1 + 2.0 (this is not correct)

为什么我手动设置新对,它会起作用?为什么我不使用this.termen.get.exponent?因为我基本上做同样的事情:在创建一个新的Pair对象时放一个整数。

有人能给我一个提示吗? :)

谢谢!

编辑:

我的termen类是我的Polynomial类的一部分,termen是类型对的自定义arraylist。

class Polynoom implements PolynoomInterface {


ArrayList<Paar> termen = new ArrayList<Paar>(); 

我的同学班:

class Paar implements Comparable <Paar> {

double coef;
int exponent;

Paar(double a, int b) {
    coef = a; 
    exponent = b; 
}

编辑2:类多项式的toString方法:

public String toString() {

   String temp = "";
    for (int i = 0; i < this.termen.size(); i++) {
        if (i != this.termen.size() - 1)
        temp += this.termen.get(i) + " + ";
      else
        temp += this.termen.get(i);
    }
    return temp; 
}

看起来它继续打印旧列表,而不是新列表。我不明白为什么。

0 个答案:

没有答案