我正在尝试创建一个多项式类,其中多项式由系数/指数对的数组表示。我创建了add方法来添加两个多项式,但我的值却重复了。
public class Poly{
private static class Pair{
int coeff;
int exponent;
private Pair(){
this.coeff=coeff;
this.exponent=exponent;
}
private Pair(int coef, int exp){
exponent = exp;
coeff = coef;
}
}
int count=2;
private Pair[] poly; //creates an Array of coefficient/exponent pairs
public Poly(){
poly = new Pair[count];
for(int i=0;i<count;i++){
poly[i] = new Pair(0,0);
}
}
public Poly(int coeff1, int exp){
int i=0;
poly = new Pair[count];
for(i=0; i<count; i++){
poly[i]= new Pair(coeff1, exp);
}
count++;
}
private Poly (int exp) {
poly = new Pair[exp+1];
poly[0].exponent = exp;
poly[0].coeff=1;
}
**public Poly add(Poly q){**
Poly result = new Poly();
int j=0;
while(j<poly.length){
for(int i=0; i<q.poly.length; i++){
if(poly[j].exponent==q.poly[i].exponent){
result.poly[j].coeff= poly[j].coeff+q.poly[i].coeff;
result.poly[j].exponent =poly[j].exponent;
}
else if(poly[j].exponent!=q.poly[i].exponent && i<q.poly.length){
result.poly[j].coeff= q.poly[i].coeff;
result.poly[j].exponent =q.poly[i].exponent;
}
else if(poly[j].exponent!=q.poly[i].exponent && i==q.poly.length-1){
result.poly[j].coeff= poly[j].coeff;
result.poly[j].exponent =poly[j].exponent;
}
}
j++;
}
return result;
}
public String toString(){
String str = "";
for(int i=0; i<poly.length; i++){
if(poly[i].coeff==0){
str+="";
}
else{
str+="+" +poly[i].coeff +"x^"+poly[i].exponent;
}
}
return str;
}
}
我试图得到一个值作为两个多项式的总和(5x ^ 9)&amp; (3x ^ 8)返回5x ^ 9 + 3x ^ 8
public static void main(String[] args) {
Poly a =new Poly(5,9);
Poly b =new Poly(3,8);
System.out.println(a);
System.out.println(b);
System.out.println("the sum of the poly is: " +ab);
}
输出
a=+5x^9+5x^9
b=+3x^8+3x^8
the sum of the poly is: +3x^8+3x^8
答案 0 :(得分:1)
您的代码很难阅读,您应该格式化它。空间很便宜,不要吝啬它们。不要只是沿着左边缘粘住所有功能;缩进它们,使它们的位置和范围明显。
count
变量是多余的。只需使用poly.length
代替。
目前,Poly.sub(x)
应该实现为return add(minus(x));
。它效率更低,但更简单,而且显然是正确的。
您是如何决定设置Poly[]
数组大小的?您正在使用count
来设置它们,这可能是错误的。也许您应该使用java.util.ArrayList<Pair>
代替add()
。我不明白你是如何在整个地方获得数组越界异常的。
mult()
未正确地乘以多项式。如何使用相同的指数合并产品术语?
创建一个函数Poly Poly.pairMult(Pair)
,然后使用mult()
和pairMult()
重新实现add
。
答案 1 :(得分:0)
Poly a = new Poly( 5, 9 );
System.out.println( a );
给出
+5x^9+5x^9
我假设您只想输出+5x^9
?
您的toString()
中有一个循环,它将迭代count
次,count
初始化为2。