多项式相加之延伸:让类的设计更彻底些


看本篇之前,请先搞懂上篇文章中的两个多项式相加的答案中的方法。

既然多项式中的项可以设计为类,那么多项式本身为啥不可以是一个类呢,想想这个多项式类的成员变量不就是一个可容纳项的顺序表吗,将多项式的大部分成员方法分派给这个顺序表来完成,并且将多项式相加的add方法也设计为其一个成员方法,这样在main中就不需要去调用个static的add方法了,请参见以下代码,如果你想通了并且可以实践,那么你的面向对象的思想则大大地进了一步。

多项式类的代码:

package mystudy.datastruct;

/**
 * 多项式
 * @author lixj
 *
 */
public class Polynomial
{
	private SeqList list; //多项式是由容纳每一项的集合构成
		
	public Polynomial()
	{
		list = new SeqList();
	}
	
	public Polynomial(int n)
	{
		list = new SeqList(n);
	}
	
	public void addElement(PElem element)
	{
		list.add(element);
	}
	
	public PElem getElement(int index)
	{
		return (PElem)list.getElement(index);
	}
	
	public int getLength()
	{
		return list.getLength();
	}
	
	public String toString()
	{
		return list.toString();
	}
	
	public Polynomial add(Polynomial poly)
	{
		Polynomial result = new Polynomial();
		
		int pos1 = 1, pos2 = 1;
		int len1 = this.getLength();
		int len2 = poly.getLength();
		
		//还有用到其他变量,在这里声明这些变量,你意识到要用到这些变量时再来声明
		PElem e1, e2, e3;
		int exp1, exp2;
		
		while (pos1 <= len1 && pos2 <= len2) {
			//e3为要放置在result中的新项,该项目前的系数和幂都是默认值0
			e3 = new PElem();

			//取出自己中第pos1个元素出来,赋值给e1,取出list2中第pos2个元素出来,赋值给e2
			e1 = (PElem) this.getElement(pos1);
			e2 = (PElem) poly.getElement(pos2);
			
			//取出e1中的幂,e2中的幂,来作比较
			exp1 = e1.getExp();
			exp2 = e2.getExp();
			//如果e1的幂>e2的幂,则将e1中的系数和幂分别赋值给e3中的系数和幂,且pos1++,即指向后一个位置,并且将e3添加(调用add)到result中
			//如果e1的幂<e2的幂,则将e2中的系数和幂分别赋值给e3中的系数和幂,且pos2++,即指向后一个位置,并且将e3添加(调用add)到result中
			//如果e1的幂==e2的幂,则将e1中的系数加上e2的系数赋值给e3中的系数,e1的幂赋值给e3的幂,且pos1++,pos2++,即都指向后一个位置,并且将e3添加(调用add)到result中
					
			if (exp1 > exp2) {
				e3.setCoefficent(e1.getCoefficent());
				e3.setExp(exp1);
				pos1++;
			} else if (exp1 == exp2) {
				e3.setCoefficent(e1.getCoefficent() + e2.getCoefficent());
				e3.setExp(exp1);
				pos1++;
				pos2++;
			} else {
				e3.setCoefficent(e2.getCoefficent());
				e3.setExp(exp2);
				pos2++;
			}
			result.addElement(e3);
		}

		
		while (pos1 <= len1) { //意味着自己还没有结束,那么将自己剩余各项的系数和幂赋值到到e3项中,并且将e3添加(调用add)到result中
			e3 = new PElem();
			e1 = (PElem) this.getElement(pos1);			
			e3.setCoefficent(e1.getCoefficent());
			e3.setExp(e1.getExp());
			result.addElement(e3);
			pos1++;
		}

		while (pos2 <= len2) {//意味着list2还没有结束,那么将list2剩余各项的系数和幂赋值到到e3项中,并且将e3添加(调用add)到result中
			e3 = new PElem();
			e2 = (PElem) poly.getElement(pos2);			
			e3.setCoefficent(e2.getCoefficent());
			e3.setExp(e2.getExp());
			result.addElement(e3);
			pos2++;
		}
		return result;	
	}

}
包含main函数的Client代码:
package mystudy.datastruct;

public class Client {

	// 顺序表的应用,求解多项式之和
	// 2x6+3x5+5x4+3x3
	// 4x5+8x4+2x2+3x+4
	public static void main(String[] args) {
		Polynomial poly1 = new Polynomial();
		PElem e1 = new PElem(2, 6);// 2x6
		PElem e2 = new PElem(3, 5);// 3x5
		PElem e3 = new PElem(5, 4);// 5x4
		PElem e4 = new PElem(3, 3);// 3x3

		poly1.addElement(e1);
		poly1.addElement(e2);
		poly1.addElement(e3);
		poly1.addElement(e4);

		Polynomial poly2 = new Polynomial();
		PElem e21 = new PElem(4, 5);
		PElem e22 = new PElem(8, 4);
		PElem e23 = new PElem(2, 2);
		PElem e24 = new PElem(3, 1);
		PElem e25 = new PElem(4, 0);

		poly2.addElement(e21);
		poly2.addElement(e22);
		poly2.addElement(e23);
		poly2.addElement(e24);
		poly2.addElement(e25);

		System.out.println(poly1);
		System.out.println(poly2);

		Polynomial poly3 = poly1.add(poly2);
		System.out.println("相加后的结果为:");
		System.out.println(poly3);
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值