今天學習鏈表的時候看到了多項式的加法,使用c語言鏈表編寫,我如今一直在用java,採用面對對象的思想作了一下java
多項式由三個部分組成:常數、係數和未知數(A、B、X等的)。多項式的加法規則是相同係數、相同未知數的常數能夠進行相加,組成一個新的項,而不一樣係數或者不一樣未知數的,則不能進行相加減,應將其寫到後面。個人多項式相加的想法是:先對一個用戶輸入的混亂的多項式根據係數來進行排序,再對排序過了兩個多項式多項式相加的規則進行相加。最後輸出結果。 如下是個人代碼:git
/** * 用於對多項式的每一項進行分類 * @author steven * */ public class Point { private int coefficient;//係數 private int exponent;//指數 public Point(int coefficient, int exponent) { super(); this.coefficient = coefficient; this.exponent = exponent; } public Point(){ } /** * 獲取係數 * @return */ public int getCoefficient() { return coefficient; } public void setCoefficient(int coefficient) { this.coefficient = coefficient; } //獲取指數 public int getExponent() { return exponent; } public void setExponent(int exponent) { this.exponent = exponent; } }
上面這個類主要是爲了表示係數和項數,若是,表示多項式中的一項github
import java.util.ArrayList; /** * 多項式 * @author steven * */ public class Multinomial { private ArrayList<Point> terms=new ArrayList<Point>(); public ArrayList<Point> getTerms() { return terms; } public void setTerms(ArrayList<Point> terms) { this.terms = terms; } /** * 重寫toString方法主要是爲了輸出查看 */ @Override public String toString() { StringBuffer sb=new StringBuffer(""); for (Point point : terms) { sb.append(point.getCoefficient()+"X"+point.getExponent()+"+"); } return sb.substring(0, sb.length()-1); } }
上面這個類主要是爲了表示多項式,裏面包含了不少的pointapp
public class Multinomials { /** * 多項式的加法 * @param multinomialA * @param multinomialB * @return */ public static Multinomial Add(Multinomial multinomialA,Multinomial multinomialB){ int i=0;//用於遍歷multinomialA int j=0;//用於遍歷multinomialB Multinomial multinomialC=new Multinomial(); Point pointA=null; Point pointB=null; for(;i<multinomialA.getTerms().size()&&j<multinomialB.getTerms().size();){ pointA=multinomialA.getTerms().get(i);//獲取multinomialA對應位置的值 pointB=multinomialB.getTerms().get(j);//獲取multinomialB對應位置的值 //比較指數,根據指數執行不一樣的命令 if(pointA.getExponent()>pointB.getExponent()){ multinomialC.getTerms().add(pointA); i++; }else if(pointA.getExponent()<pointB.getExponent()){ multinomialC.getTerms().add(pointB); j++; }else{ pointA.setCoefficient(pointA.getCoefficient()+pointB.getCoefficient()); //pointA.setExponent(pointA.getExponent()+pointB.getExponent()); multinomialC.getTerms().add(pointA); i++; j++; } } if(j!=multinomialA.getTerms().size()){//multinomialA遍歷完成 for(;j<multinomialB.getTerms().size();j++){ pointB=multinomialB.getTerms().get(j); multinomialC.getTerms().add(pointB); } } if(i!=multinomialA.getTerms().size()){//multinomialB遍歷完成 for(;i<multinomialA.getTerms().size();i++){ pointA=multinomialA.getTerms().get(i); multinomialC.getTerms().add(pointA); } } return multinomialC; } /** * 測試類 * @param args */ public static void main(String[] args) { Point a=new Point(5,8); Point b=new Point(6,7); Point c=new Point(-1,8); Point d=new Point(2,1); Multinomial multinomialA=new Multinomial(); multinomialA.getTerms().add(a); multinomialA.getTerms().add(b); Multinomial multinomialB=new Multinomial(); multinomialB.getTerms().add(c); multinomialB.getTerms().add(d); Multinomial multinomialC= Multinomials.Add(multinomialA, multinomialB); System.out.println(multinomialC.toString()); } }
這是仿照java的容器寫的,最後的結果測試成功.源碼下載地址多項式加法ide