0

多項式が係数/指数のペアの配列で表される多項式クラスを作成しようとしています。2 つの多項式を加算する 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+3x^8 を返すために、2 つの多項式 (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
4

2 に答える 2

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

于 2013-10-31T14:33:34.133 に答える
0
Poly a = new Poly( 5, 9 );
System.out.println( a );

与える

+5x^9+5x^9

+5x^9出力されたいだけだと思いますか?

toString()を繰り返すループがあり、2に初期化されています。countcount

于 2013-10-31T14:12:58.090 に答える