我有这个问题。我正在创建一个多项式程序,我可以在其中进行减法、加法和乘法运算。
但是我遇到了这个错误,我无法确定为什么会发生这种情况。
首先我有我的 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;
}
看起来它一直在打印旧列表,而不是新列表。我不明白为什么。