java 实现多项式相加相乘

贾永超 发布于 07/17 18:03
阅读 217
收藏 0

要求如下:

1.定义一个类,get set 方法,toString 方法,指数和项数

2.定义一个多项式类,使用Java类LinkedList,创建一个名为AddTerm的方法,将节点添加到链表中。该方法的为:public void AddTerm(int系数,int指数),多项式类所使用的链表应该是一个按指数降序排列的链表,实现多项式类的输出操作。使用toString方法

4.使用java 中的scanner类交互,提示输入,输出 

加载中
0
tcxu
tcxu
import java.util.LinkedList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

class Term {
	private int exp; //指数 exponent
	private int coef;//系数 coefficient
	private String symbol ="X";
	public Term(int coef, int exp){
		setExp(exp);
		setCoef(coef);
	}
	public void setExp(int exp){
		this.exp = exp;
	}
	public void setCoef(int coef){
		this.coef = coef;
	}
	public int getExp(){
		return exp;
	} 
	public int getCoef(){
		return coef;
	}
	public String toString(){
		String s = coef+"";
		s += symbol;
		s += "^" + exp;
		return s;
	}
}

class ExponentCompare implements Comparator<Term>{
	public int compare(Term node1, Term node2){
		if (node1.getExp()<node2.getExp())
		return  1;
		if (node1.getExp()>node2.getExp())
		return -1;
		return 0;
		}
	}

class Polynomial{
	LinkedList<Term> polynomial;
	public Polynomial(){ //构造方法
		polynomial = new LinkedList<Term>();
	}

// 多项式 p1, p2 相加 ,方法 返回相加的结果
	public Polynomial add(Polynomial p1, Polynomial p2){
		Polynomial p = new Polynomial();
		for (int i=0;i<p1.polynomial.size();i++){
			Term node = p2.search(p1.polynomial.get(i).getExp());
			if (node==null)
			p.addTerm(p1.polynomial.get(i).getCoef(), p1.polynomial.get(i).getExp());
			else{
				int n = node.getCoef() + p1.polynomial.get(i).getCoef();
				p.addTerm(n ,p1.polynomial.get(i).getExp()); 
			}
			
			
		}
	return p;
	}
	
	// 多项式 p1, p2 相乘 ,方法 返回相乘的结果
	public Polynomial multiply(Polynomial p1, Polynomial p2){
		Polynomial p = new Polynomial();
		for (int i=0;i<p1.polynomial.size();i++)
			for (int j=0;j<p2.polynomial.size();j++)
				p.addTerm(p1.polynomial.get(i).getCoef()*p2.polynomial.get(j).getCoef(),
				p1.polynomial.get(i).getExp() + p2.polynomial.get(j).getExp() );
		return p;
		}
	
	public Term search(int n){ //查询指数为n的元素。查询不到,返回null
		int size = polynomial.size();
		for (int i=0;i<size;i++)
		if ( polynomial.get(i).getExp() == n)
			return polynomial.get(i);
		return null;
	}
	public void addTerm(int coefficient, int exponent){
		Term node = search(exponent);
		if (node==null){
			Term term = new Term(coefficient,exponent);
			polynomial.add(term);
			Collections.sort(polynomial, new ExponentCompare() );
		} else{
		node.setCoef(node.getCoef()  + coefficient)	;
		}
	}
	public String toString(){
		String s = polynomial.get(0).toString();
		for (int i=1;i<polynomial.size();i++)
		s += "+" + polynomial.get(i);
		return s;
	}
}

public class Test{

public static void main(String args[]){
	
	Polynomial poly1 = new Polynomial();
	Polynomial poly2 = new Polynomial();
	Scanner input = new Scanner(System.in);
	int i =1, co=0,ex=0;
	System.out.println("注意:每一个多项式的数据输入完毕时,将系数项 输入0值。");
	System.out.println("输入第一个多项式的数据");
	while (true) {
		System.out.print("第 " + i + " 项系数 (若键入 0,则终止这个多项式的数据输入):");
		co = input.nextInt();
		if (co==0) break;
		System.out.print("第 " + i++ + " 项指数:");
		ex = input.nextInt();
		poly1.addTerm(co,ex);
	}
	System.out.println("输入的第一个多项式:" + poly1);
	
	System.out.println("输入第二个多项式的数据");
	i=1;
	while (true) {
		System.out.print("第 " + i + " 项系数 (若键入 0,则终止这个多项式的数据输入):");
		co = input.nextInt();
		if (co==0) break;
		System.out.print("第 " + i++ + " 项指数:");
		ex = input.nextInt();
		poly2.addTerm(co,ex);
	}
	System.out.println("输入的第二个多项式:" + poly2);
	
	System.out.println("这两个多项式之和:" + poly1.add(poly1,poly2));
	System.out.println("这两个多项式的乘积:" + poly1.multiply(poly1,poly2));
	}

}

输出:

注意:每一个多项式的数据输入完毕时,将系数项 输入0值。
输入第一个多项式的数据
第 1 项系数 (若键入 0,则终止这个多项式的数据输入):6
第 1 项指数:1
第 2 项系数 (若键入 0,则终止这个多项式的数据输入):5
第 2 项指数:0
第 3 项系数 (若键入 0,则终止这个多项式的数据输入):0
输入的第一个多项式:6X^1+5X^0
输入第二个多项式的数据
第 1 项系数 (若键入 0,则终止这个多项式的数据输入):4
第 1 项指数:1
第 2 项系数 (若键入 0,则终止这个多项式的数据输入):3
第 2 项指数:0
第 3 项系数 (若键入 0,则终止这个多项式的数据输入):0
输入的第二个多项式:4X^1+3X^0
这两个多项式之和:10X^1+8X^0
这两个多项式的乘积:24X^2+38X^1+15X^0

 

0
f
freezingsky

现在的学生, 都挺直接的!

0
前端大师傅
前端大师傅

写得蛮好的,只是有个地方可以优化一下,一楼的朋友应该不知道有个方法StringUtil.join方法,将数组变成字符串和split相反,没必要toString重写时去拼字符串。

public String toString(){

		return StringUtil.join(polynomial,"+");
	}

 

返回顶部
顶部