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

来源:互联网 发布:兴业证券 炒股软件 编辑:程序博客网 时间:2024/06/09 22:39


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

既然多项式中的项可以设计为类,那么多项式本身为啥不可以是一个类呢,想想这个多项式类的成员变量不就是一个可容纳项的顺序表吗,将多项式的大部分成员方法分派给这个顺序表来完成,并且将多项式相加的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中的新项,该项目前的系数和幂都是默认值0e3 = new PElem();//取出自己中第pos1个元素出来,赋值给e1,取出list2中第pos2个元素出来,赋值给e2e1 = (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+4public static void main(String[] args) {Polynomial poly1 = new Polynomial();PElem e1 = new PElem(2, 6);// 2x6PElem e2 = new PElem(3, 5);// 3x5PElem e3 = new PElem(5, 4);// 5x4PElem e4 = new PElem(3, 3);// 3x3poly1.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
原创粉丝点击