0
import java.util.*;
class Poly{
    protected int[] coef = new int[1001];
    protected int[] exp  = new int[1001];
    protected int len;
    protected void attach(int c, int e){
        coef[len]  = c;
        exp[len++] = e;
    }
    protected void print() {
        for (int i=0; i<len; i++)
            System.out.print(coef[i]+" "+exp[i]+" ");
        System.out.println();
    }
}
class Add extends Poly{
    protected Add add(Add y) {
        int i,j;
        Add rel = new Add();
        for(i=0, j=0; i<len && j<y.len;) {
            if(exp[i] < y.exp[j]) {
                rel.attach(y.coef[j], y.exp[j]);
                j++;
            } else if(exp[i] > y.exp[j]) {
                rel.attach(coef[i], exp[i]);
                i++;
            } else{
                int c = coef[i] + y.coef[j];
                if(c != 0)
                    rel.attach(c,exp[i]);
                i++;
                j++;
            }
        }
        while(i < len)
            rel.attach(coef[i], exp[i++]);
        while (j < y.len)
            rel.attach(y.coef[j], y.exp[j++]);
        return rel;
    }
}
class Mul extends Add{
    protected Add mul(Add y){
        Mul sum = new Mul();     //the following error has been solved by change this
                                 //Mul to Add , why?
        for(int i=0;i<len;i++){
            Mul tmp = new Mul();
            for(int j=0; j<y.len; j++)
                tmp.attach(coef[i]*y.coef[j], exp[i]+y.exp[j]);          
            sum = sum.add(tmp);  //there are an error here
                                 //incompatible types
                                 //required : Mul
                                 //found : Add
        }
        return sum;
    }
}
public class answer{
    public static void main(String[] argv){
        Mul d = new Mul();
        Mul e = new Mul(); 
        d.attach(6,4);
        d.attach(7,2);
        d.attach(2,1);
        d.attach(8,0);       
        e.attach(9,5);
        e.attach(3,2);
        e.attach(-1,1);
        e.attach(5,0);       
        System.out.println("Mul");    
        System.out.println("D(x)= 9 5 3 2 -1 1 5 0");
        System.out.println("E(x)= 6 4 7 2 2 1 8 0"); 
        System.out.print("F(x)=");
        d.mul(e).print();
    }
}

これはBigInt、拡張コンセプトを実践する簡単なサンプルです。

Class Mul にエラーがあります:

  sum = sum.add(tmp);
         ^
 incompatible types
 required : Mul
 found : Add

Mul sum = new Mul(); to同じ Mul クラスで Add sum = new Add ();`を変更すると、この問題は解決しました。

どうして走れるの?元のコードを使用できないのはなぜMul sum = new Mul()ですか?

問題は、Google で検索したことがありますが、解決方法が常に記載されていますが、概念を知りたいです。

お願いします、英語で質問するのは初めてです、何か不快に思われた場合はご容赦ください。

ありがとうございました

4

2 に答える 2

1

問題は、addメソッドが return と宣言されてAddいることですが、戻り値を type の変数に代入しようとしていますMul。それは有効ではありません。の宣言された型sumをのAdd代わりに に変更すると、最初に型の値でmul初期化しても、その代入は問題ありません。sumMul

メソッド呼び出しを代入から分離して戻すと、より明確になる場合がありますsum

Mul sum = new Mul();
Mul tmp = new Mul();
...
Add result = sum.add(tmp);
sum = result; // This is the bit that's invalid

Mulここで何を達成しようとしているのかは明確ではありませんが、そもそもクラスが拡張されているのではないかと疑っAddています...

于 2013-11-09T12:53:10.050 に答える
1

メソッドは classのAdd.addオブジェクトを返しますAdd。このオブジェクトへの参照をmultypeの変数に代入しようとしていますMulAddは のサブクラスではないため、これは許可されませんMul。(実際にMulは のサブクラスですがAdd、それは無関係です。)

于 2013-11-09T12:53:21.100 に答える