java實現多項式的加法

今天學習鏈表的時候看到了多項式的加法,使用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

相關文章
相關標籤/搜索