簡體   English   中英

添加兩個整數多項式。 整數雙轉換問題

[英]Adding two Integer polynoms. Integer Double conversion problem

簡短說明:我想在java中對多項式進行操作。 多項式具有整數系數。 如果我將兩個多項式相加,則我希望結果也具有Integer系數。 如果我集成一個多項式,我希望結果具有雙系數。

從一個單體列表構建一個多項式。 一個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。

這是多項式類的一部分:

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()是一個執行以下操作的函數:每當我調用它時,如果存在具有相同等級(grad)的單體,則將它們添加到第一個monome中,並將另一個從列表中刪除。

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)排序的。

我認為你最好的辦法是擺脫MonomIntMonomDouble類,並讓你的Monom類將其系數列為Double而不是Number 然后你可以有一個構造函數,它接受一個Double作為參數(沒有轉換),另一個構造函數接受一個Integer並強制轉換它(顯式或隱式)。

然后對於你的輸出,如果Double“.0”路徑是個問題,你可以重載toString()並在這個問題上做一些明確的格式化選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM