0

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

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

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

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; 
}

这将创建一个包含双精度和整数的对列表。例如:

-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 --; 
        }       
    }
}

但是,不知何故,我在新 Pair 中传递的第二个参数不起作用。

例如,如果我将新 Pair 更改为:

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

例如,如果我将新 Pair 更改为:

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 是类型对的自定义数组列表。

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; 
}

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

4

0 回答 0