#java #data-structures #linked-list #polynomials #polynomial-math
#java #структуры данных #связанный список #многочлены #многочлен-математика
Вопрос:
У меня есть назначение для моего класса структур данных. В задании мы должны реализовать сложение полиномов с использованием связанных списков. Я думаю, что у меня это не работает, но eclipse выдает мне исключение с нулевым указателем. Моя проблема связана с методом add, хотя я включил весь класс для контекста. Умножением я займусь после.. Пожалуйста, помогите.
class PolynomialLinkedList{
private static class PNode{
private int coe;
private int exp;
private PNode next;
public PNode(int c, int e){
this(c, e, null);
}
public PNode(int c, int e, PNode n){
coe = c;
exp = e;
next = n;
}
public void setCoe(int c){ coe = c;}
public void setExp(int e){ exp = e;}
public void setNext(PNode n){ next = n;}
public int getCoe(){ return coe;}
public int getExp(){ return exp;}
public PNode getNext(){ return next;}
}
private PNode first;
private PNode last;
public PolynomialLinkedList(){
first = last = null;
}
public PolynomialLinkedList(int c, int e){
PNode tempn = new PNode(c, e);
first = last = tempn;
}
public void print(){
if (first == null){
System.out.println();
return;
}
PNode temp = first;
String ans = "";
while (temp != null){
if (temp.getCoe() > 0) {
if (temp != first) ans = ans " ";
ans = ans temp.getCoe();
}
else if (temp.getCoe() < 0) ans = ans " - " temp.getCoe() * -1;
if (temp.getExp() != 0){
ans = ans "X^" temp.getExp();
}
temp = temp.getNext();
}
System.out.println(ans);
}
public PolynomialLinkedList add(PolynomialLinkedList s){
PolynomialLinkedList sum = new PolynomialLinkedList();
PNode temp1 = this.first;
PNode temp2 = s.first;
PNode tempAns = new PNode(0,0);
if(temp1.exp != temp2.exp) {
while(temp1.exp > temp2.exp) {
tempAns.setCoe(temp1.coe);
tempAns.setExp(temp1.exp);
temp1 = temp1.getNext();
tempAns = sum.first.getNext();
}
while(temp1.exp < temp2.exp) {
tempAns.setCoe(temp2.coe);
tempAns.setExp(temp2.exp);
temp2 = temp2.getNext();
tempAns = sum.first.getNext();
}
}
else if(temp1.exp == temp2.exp) {
while(temp1.exp == temp2.exp) {
tempAns.setCoe((temp1.coe temp2.coe));
tempAns.setExp(temp1.exp);
temp1 = temp1.getNext();
temp2 = temp2.getNext();
tempAns = sum.first.getNext();
}
}
return sum;
}
public PolynomialLinkedList multiply(PolynomialLinkedList s){
PolynomialLinkedList product = new PolynomialLinkedList();
//implement this method
return product;
}
}
Комментарии:
1. Вы должны попытаться использовать встроенный в
LinkedList
качестве первого шага улучшения, если вам нужно использовать связанный список, как вы упомянули.LinkedList<PNode>
PNode
содержит 2 свойстваcoe
иexp
поможет сократить объем реализации / логики вокруг связанного списка, вам нужно будет только управлять своей пользовательской логикой.2. Пожалуйста, отредактируйте свой вопрос с подробностями
NullPointerException
. Пожалуйста, добавьте трассировку стека и набор входных данных, для которых вы получаетеNullPointerException
.