[英]Add Two Polynomials Java Program
我正在研究這個添加兩個多項式的簡單程序。 但是,我得到了錯誤的結果,無法發現錯誤。
import java.util.LinkedList;
public class Polynomial {
private LinkedList<Term> terms = new LinkedList<Term>();
private class Term {
private int coef;
private int exp;
public Term(int coef, int exp) {
this.coef = coef;
this.exp = exp;
}
public int getCoef() {
return coef;
}
public int getExp() {
return exp;
}
public String toString() {
return (this.coef + "x^" + this.exp);
}
}
public String addPoly(String first, String second) {
LinkedList<Term> otherTerms = new LinkedList<Term>();
String result = "";
String [] termsArray1 = first.split(";");
String [] termsArray2 = second.split(";");
for (int i = 0; i < termsArray1.length; i++) {
String [] temp = termsArray1[i].split("x\\^");
int currentCoef = Integer.parseInt(temp[0]);
int currentExp = Integer.parseInt(temp[1]);
Term currentTerm = new Term(currentCoef, currentExp);
terms.add(currentTerm);
}
for (int i = 0; i < termsArray2.length; i++) {
String [] temp = termsArray2[i].split("x\\^");
int currentCoef = Integer.parseInt(temp[0]);
int currentExp = Integer.parseInt(temp[1]);
Term currentTerm = new Term(currentCoef, currentExp);
otherTerms.add(currentTerm);
}
int i = 0;
int j = 0;
while (true){
if(i == terms.size() || j == otherTerms.size()) {
break;
}
if(terms.get(i).getExp() < otherTerms.get(j).getExp()) {
result += (otherTerms.get(j).toString() + ";");
j++;
}
if(terms.get(i).getExp() > otherTerms.get(j).getExp()) {
result += (terms.get(i).toString() + ";");
i++;
}
if(terms.get(i).getExp() == otherTerms.get(j).getExp()) {
Term temp = new Term((terms.get(i).getCoef() + otherTerms.get(j).getCoef()), terms.get(i).getExp());
result += (temp.toString() + ";");
i++;
j++;
}
}
result = result.substring(0, result.length()-1);
return result;
}
}
::測試::
字符串 s3 = "5x^2;-4x^1;3x^0";
字符串 s4 = "6x^4;-1x^3;3x^2";
多項式 p = 新多項式();
System.out.println(p.addPoly(s4, s3));
預期結果:6x^4;-1x^3;7x^2;-4x^1;3x^0
實際結果:3x^4;7x^2;-1x^1;10x^0
問題是,當您的循環退出時,以下情況之一仍然可能為真:
i < terms.size()
j < j == otherTerms.size()
您的示例輸入就是這種情況。 這意味着其中一項條款的一部分尚未處理並集成到 output 中。
第二個問題是您的多個if
語句不是排他性的。 在執行第一個if
塊並且j++
已經執行之后,很可能j
在評估第二個if
時是otherTerms
中的無效索引。 應該通過將第二個和第三個if
轉換為else if
來避免這種情況。
這是該循環的修復:
while (i < terms.size() || j < otherTerms.size()) {
if(i == terms.size() || j < otherTerms.size() && terms.get(i).getExp() < otherTerms.get(j).getExp()) {
result += (otherTerms.get(j).toString() + ";");
j++;
}
else if(j == otherTerms.size() || i < terms.size() && terms.get(i).getExp() > otherTerms.get(j).getExp()) {
result += (terms.get(i).toString() + ";");
i++;
}
else if(terms.get(i).getExp() == otherTerms.get(j).getExp()) {
Term temp = new Term((terms.get(i).getCoef() + otherTerms.get(j).getCoef()), terms.get(i).getExp());
result += (temp.toString() + ";");
i++;
j++;
}
}
你的方法不是真的 OOP。 理想情況下,第一個表達式應該用於創建Polynomial
的一個實例,而另一個表達式應該用於創建Polynomial
的另一個實例。 然后應該有一個方法可以將另一個Polynomial
實例添加到自己的實例中。 最后應該有一個toString
方法,它將實例作為所需格式的字符串返回。 您的驅動程序代碼將如下所示:
Polynomial a = new Polynomial("5x^2;-4x^1;3x^0");
Polynomial b = new Polynomial("6x^4;-1x^3;3x^2");
Polynomial sum = a.addPoly(b);
System.out.println(sum.toString());
這更加面向 object,並且會自動避免您當前擁有的代碼重復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.