用Java实现多项式相加

来源:互联网 发布:知乎 自己掏耳屎的方法 编辑:程序博客网 时间:2024/06/05 00:56

        今天看了一篇关于C的多项式相加的文章,但是觉得那位作者的想法尚有待完善,觉得可以做得更好,可惜我不熟悉C,于是我用我熟悉的Java来完善这一程序。

        多项式由三个部分组成:常数、系数和未知数(A、B、X等的)。多项式的加法规则是相同系数、相同未知数的常数可以进行相加,组成一个新的项,而不同系数或者不同未知数的,则不能进行相加减,应将其写到后面。我的多项式相加的想法是:先对一个用户输入的混乱的多项式根据系数来进行排序,再对排序过了两个多项式多项式相加的规则进行相加。最后输出结果。

       课本上的多项式相加程序并没有对输入的多项式进行排序,这也算是我的一个小小小的创新,但是,在实际中,往往也不用排序,我在这里使用排序,我个人也觉得有不妥之处,但是不知道到底哪里不妥。

    

       以下就是我的代码了:

      首先创建一个多项式的类,规定多项式的元数据。

   public class PolinomiaData {
   public int exp;
   public int costant;
   public String symbol;
    
    public PolinomiaData(int exp){
        this.exp=exp;
        this.costant=1;
        this.symbol="X";
    }
    
    public PolinomiaData(int constant,int exp){
        this.exp=exp;
        this.costant=constant;
        this.symbol="X";
    }
    
    public PolinomiaData(int constant,int exp,String symbol){
        this.exp=exp;
        this.costant=constant;
        this.symbol=symbol;
    }

    /**
     * @return the exp
     */
    public int getExp() {
        return exp;
    }

    /**
     * @param exp the exp to set
     */
    public void setExp(int exp) {
        this.exp = exp;
    }

    /**
     * @return the costant
     */
    public int getCostant() {
        return costant;
    }

    /**
     * @param costant the costant to set
     */
    public void setCostant(int costant) {
        this.costant = costant;
    }

    /**
     * @return the symbol
     */
    public String getSymbol() {
        return symbol;
    }

    /**
     * @param symbol the symbol to set
     */
    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }
      
}

     接下来我就直接上多项式的加法了:

public class PolinomiaMethod {

//获得多项式的式子
    public ArrayList getPolinomia(PolinomiaData...pd){
        ArrayList<PolinomiaData> al = new ArrayList();
        for(PolinomiaData pp : pd){
            al.add(pp);
        }
        return sort(al);
    }
   

//多项式相加的方法
    public ArrayList add(ArrayList<PolinomiaData> al1,ArrayList<PolinomiaData> al2){
        int startIndex = 0;
        int addConstant = 0 ;
        for(int i = 0;i<al2.size();i++){
               int j = startIndex;
               while(al1.get(j).getExp()!= al2.get(i).getExp()){
                   j++;
                   if(j==al1.size()-1){
                   al1.add(al2.get(i));
                   startIndex=0;
                   break;
               }
               else if(al1.get(j).getExp()==al2.get(i).getExp() && al1.get(j).getSymbol()==al2.get(i).getSymbol()){
                   addConstant = al1.get(j).getCostant()+al2.get(i).getCostant();
                   al1.get(j).setCostant(addConstant);
                   startIndex = j;
                   break;
               }
               else {
                   al1.add(al2.get(i));
                   startIndex = 0;
                   break;
               }
               }
 
        }
        return sort(al1);       
    }
   

//对多项式进行排序
    public ArrayList sort(ArrayList<PolinomiaData> al){
        for(int i = 0; i<=al.size()-1;i++){
                for(int j = i;j>=1;j--){
                    if(al.get(j-1).getExp()>al.get(j).getExp()){
                        swap(al.get(j-1),al.get(j));
                    }
                }
        }
         return al;
}
 //排序会用到的元素交换方法  

    public void swap(PolinomiaData ob1,PolinomiaData ob2){
        PolinomiaData pd = new PolinomiaData(0,0,"X") ;
        pd.setCostant(ob1.costant);
        ob1.setCostant(ob2.getCostant());
        ob2.setCostant(pd.getCostant());
        
        pd.exp=ob1.exp;
        ob1.exp=ob2.exp;
        ob2.exp=pd.exp;
        
        pd.symbol=ob1.symbol;
        ob1.symbol=ob2.symbol;
        ob2.symbol=pd.symbol;
    }
 

//打印ArrayList里面的多项式
    public void printPolinomia(ArrayList<PolinomiaData> al){
        System.out.println("The Final Result is :");
        int i = 0;
         while(i<al.size()-1){            
             System.out.print(al.get(i).getCostant()+al.get(i).getSymbol()+"^"+al.get(i).getExp()+"+");    
             i++;
         }
         System.out.println(al.get(i).getCostant()+al.get(i).getSymbol()+"^"+al.get(i).getExp());
        }
    
    //简单的测试
    public static void main(String args[]){
        PolinomiaMethod pm  = new PolinomiaMethod();
        ArrayList<PolinomiaData> al1  = pm.getPolinomia(new PolinomiaData(2,3),new PolinomiaData(4,1),new PolinomiaData(4,7),new PolinomiaData(6,7,"A"));
        ArrayList<PolinomiaData> al2 = pm.getPolinomia(new PolinomiaData(4,3),new PolinomiaData(7,4),new PolinomiaData(1,2),new PolinomiaData(5,7,"B"));
        pm.printPolinomia(pm.add(al1, al2));
    }
}

测试结果如下:

The Final Result is :
4X^1+1X^2+6X^3+7X^4+4X^7+6A^7+5B^7

     

       这份代码主要还是为了交流,如果你发现其中有不妥之处,也请你指出来。


原创粉丝点击