Добавление двух полиномов, сохраненных в виде связанного списка в java
У меня есть мономиальная структура, которая принимает коэффективную и экспоненту трех переменных как единую number.My мономиальный класс выглядит следующим образом:
public class Monomial {
private Float coeff;
private Integer exp;
private Integer x,y,z;
public Monomial() {
this.coeff=null;
this.x=this.y=this.z=null;
this.exp=null;
}
public Monomial(Float coeff, Integer x, Integer y, Integer z) {
this.coeff = coeff;
this.x = x;
this.y = y;
this.z = z;
this.exp = (100*x)+(10*y)+z;
}
public Monomial(Integer exp) {
this.exp = exp;
this.x=(exp-(exp%100))/100;
this.z = exp%10;
this.y = ((exp-z)/10)%10;
}
public Monomial(Float coeff, Integer exp) {
this.coeff = coeff;
this.exp = exp;
this.x=(exp-(exp%100))/100;
this.z = exp%10;
this.y = ((exp-z)/10)%10;
}
}
Мой класс полиномов хранится в виде связанного списка мономов.
Я хочу добавить 2 полинома.Вот моя функция сложения
public Polynomial addition(Polynomial a, Polynomial b) {
LinkedList<Monomial> Main = new LinkedList<>();
LinkedList<Monomial> temp1 = a.getPolynomial();
LinkedList<Monomial> temp2 = b.getPolynomial();
for(int i = 0;i<temp1.size();i++){
for(int j = 0;j<temp2.size();j++){
Integer c1= temp1.get(i).getExp();Integer c2 = temp2.get(j).getExp();
if(c1.equals(c2)){
Float k1 = temp1.get(i).getCoeff();Float k2 = temp2.get(j).getCoeff();
Main.add(new Monomial( k1+k2,temp2.get(j).getExp()));
//temp1.remove(i);temp2.remove(j);
}
else if(!c1.equals(c2)){
Main.add(new Monomial(temp1.get(i).getCoeff(),temp1.get(i).getExp()));
//temp1.remove(i);
Main.add(new Monomial(temp2.get(j).getCoeff(),temp2.get(j).getExp()));
//temp2.remove(j);
}
}
}
Polynomial ret = new Evaluator(Main);
return ret;
}
Мой ввод выглядит так
Polynomial1:
10
1
2
3
11
4
5
6
Polynomial2:
12
1
2
3
13
4
5
6
Вывод, который я получаю, таков::
22.0 1 2 3
10.0 1 2 3
13.0 4 5 6
Это не желаемый результат.Расчет выполнен неверно.Я знаю, что что-то не так с моим телом петли, но я не знаю, что это такое.
Я хотел бы знать, что пошло не так и как это исправить.
1 ответ:
Ваш алгоритм явно ошибочен. Просто используйте бумагу и карандаш, чтобы увидеть, что происходит: вы обрабатываете n раз каждый мономиал, который не является тем, что делает полиномиальное сложение.
Правильный способ-построить метод добавления мономиала к существующему многочлену и итерации добавленного многочлена. Но это еще не все, ваш трюк вычисления одного коэффициента для сравнения 3 целых значений в одной операции работает только в том случае, если все отдельные коэффициенты находятся в диапазоне 0-9...