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