[英]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)排序的。
我認為你最好的辦法是擺脫MonomInt
和MonomDouble
類,並讓你的Monom
類將其系數列為Double
而不是Number
。 然后你可以有一個構造函數,它接受一個Double
作為參數(沒有轉換),另一個構造函數接受一個Integer
並強制轉換它(顯式或隱式)。
然后對於你的輸出,如果Double
的“.0”路徑是個問題,你可以重載toString()並在這個問題上做一些明確的格式化選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.