相加两个整数多项式。整数双转换问题

时间:2019-03-15 07:43:10

标签: java

简短说明:我想对Java中的多项式进行运算。多项式具有整数系数。如果我将两个多项式相加,则我希望结果也具有Integer系数。如果我集成一个多项式,我希望结果具有双系数。

一个polynome是从一个单体列表中构建的。一个monome有一个系数(一个数字)和一个等级。为了实现Integer-Double转换,我创建了两个子类:一个名为MonomInt的子类,具有一个Integer系数,另一个名为MonomDouble的子类具有Double系数。

这是monome类的一部分:

public class Monom implements Comparable<Monom>{
protected Integer grad;
protected Number coeficient;

public Monom(Number coeficient, Integer grad){
    if(grad < 0){
        this.grad = 0;
        this.coeficient = 0;
    } else {
        this.grad = grad;
        this.coeficient = coeficient;
    }
} ...

MonomInt和MonomDouble具有相同的构造函数,唯一的区别是系数是Integer或Double。

这是polynome类的一部分:

public class Polinom {
private List<Monom> monoame = new ArrayList<Monom>();
private Integer grad = 0;

public Polinom(List<Monom> mon) {
    for(Monom m : mon) {
        Integer gradNou = m.getGrad();
        if(this.grad < gradNou) {
            this.grad = gradNou;
        }
        monoame.add(m);
    }
    simplify();
}

Simplify()是一个执行以下功能的函数:每当我调用它时,如果有具有相同rank(grad)的单体,它们将被添加到第一个单体中,而另一个将从列表中删除。 / p>

public void simplify() {
    Collections.sort(monoame);
    for(int i = 0; i < monoame.size() - 1; i++) {
        while(monoame.get(i).getGrad().equals(monoame.get(i + 1).getGrad())){
            Number oldCoef = monoame.get(i).getCoeficient();
            Number newCoef = monoame.get(i + 1).getCoeficient();
            monoame.get(i).setCoeficient((Number)(oldCoef.doubleValue() + newCoef.doubleValue()));
            monoame.remove(i + 1);
            if(i + 1 == monoame.size()) {
                break;
            }
        }
    }
    resetGrad();
}

对于添加,我进行了以下废除:从第二个多义词中取出列表,并将其元素逐个添加到第一个多义词中。最后,简化。

public Polinom suma(Polinom p, Polinom q) {
    Polinom suma = new Polinom(p.getMonList());
    for(Monom qM : q.getMonList()) {
        Monom aux = new MonomInt(qM.getCoeficient().intValue(), qM.getGrad());
        suma.addMonom(aux);
    }
    return suma;
}

例如,通过将“ 3x ^ 3 + x ^ 2 + 3x + 2”与“ 2x”相加,我得到3x ^ 3 + 1x ^ 2 + 5.0x + 2(添加的那个被修改为Double) 。通过集成,一切都可以正常工作,因为就像前面的示例一样,它可以自动转换为Double。我该如何解决?

编辑:另外,我忘了提到列表中的单体位是按rank(grad)排序的。

1 个答案:

答案 0 :(得分:0)

我认为您最好的选择是摆脱MonomIntMonomDouble类,并让您的Monom类将其系数列为Double而不是{ {1}}。然后,您可以有一个使用Number作为参数(不进行转换)的构造函数,以及另一个使用Double并将其强制转换(显式或隐式)的构造函数。

然后输出,如果Integer“。0” 尾随 是一个问题,您可以重载toString()并对此进行一些明确的格式选择。