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这是我练习扩展概念的简单示例,

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()

这个问题,我在谷歌上搜索过,总是说如何解决,但我想知道这个概念。

拜托,这是我第一次用英语提问,如果您发现任何冒犯性的内容,请原谅。

谢谢

4

2 回答 2

1

问题是该add方法被声明为返回Add- 但您试图将返回值分配给 type 的变量Mul。那是无效的。如果您将声明的类型更改为sumtoAdd而不是mul,那么即使您使用 type开始sum的值进行初始化,该分配也可以。Mul

如果您将方法调用从分配中分离出来,您可能会更清楚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

Add.add方法返回一个类对象Add。您正在尝试将此对象的引用分配给mul具有 type的变量Mul。这是不允许的,因为Add它不是 的子类Mul。(实际上,Mul是 的子类Add,但这无关紧要。)

于 2013-11-09T12:53:21.100 回答