Java-添加和减去多项式

时间:2017-04-28 03:26:56

标签: java sorting add polynomials subtraction

所以我正在做这个项目及其完成,但我有一个问题就是输出。这个项目涉及使用带有指数,链表和storting的数组添加和减去多项式

为什么我的第二次和第四次测试得到空值。这是代码和出 put。这里的代码不是全部在一个类中,有单独的类:

        public interface PolynomialInterface {

            PolynomialInterface add(PolynomialInterface other);

            // Effect: Adds value to owner of addPolynomial method.

            // Postcondition: Return value = this + value.

            PolynomialInterface subtract(PolynomialInterface other);

            // Effect: Subtracts value from owner of addPolynomial method.

            // Postcondition: Return value = this - value. void readPolynomial();

            // Postcondition: polynomial read.

            String toString();

             //Postcondition: polynomial converted to string. 
             }




            import java.util.ArrayList;

             public class ArrayWithExponentAsIndexPolynomial implements PolynomialInterface

            {

             int polynomial[];

             int highExp;

             ArrayWithExponentAsIndexPolynomial()

             {

                  polynomial=new int[200];

             }

             ArrayWithExponentAsIndexPolynomial(String pol)

             {

                  polynomial=new int[200];

                  highExp=0;

                  int co=0;//Coefficient

                  int exp=0;//exponent

        //Convert the polynomial string into linked list of polynomial terms

                  for(int i=0;i<pol.length();i++)

                  {

                      co=0;

                      exp=0;

                      //Find coefficient

                      while(pol.charAt(i)!='x' && pol.charAt(i)!='X' )

                      {                 

                           if(pol.charAt(i)=='-')

                           {

                                i++;

                                while(i<pol.length())

                                {

                                     if(pol.charAt(i)!='x' && pol.charAt(i)!='X' )

                                     {

                                     String sub=pol.substring(i,i+1);

                                     co=co*10+Integer.parseInt(sub);

                                     }

                                     else

                                          break;

                                     i++;

                                }

                                co=co*-1;                   

                           }

                           else if (pol.charAt(i)=='+')

                           {

                                i++;

                           }

                           else

                           {

                                String sub=pol.substring(i,i+1);

                                co=co*10+Integer.parseInt(sub);

                                i++;

                           }



                           if(i>=pol.length())

                                break;



                      }

                      i++;//skip x

                      if(i==pol.length())

                      {

                           if(pol.charAt(i-1)=='x' || pol.charAt(i-1)=='X')

                                          exp=1;

                      }

                      i++;//skip ^

                      if(i<pol.length())

                      while(pol.charAt(i)!='-' && pol.charAt(i)!='+' )

                      {

                           String sub=pol.substring(i,i+1);

                           exp=exp*10+Integer.parseInt(sub);

                           i++;

                           if(i>=pol.length())

                                break;

                      }

                      if(highExp<exp)

                           highExp=exp;

                      addATerm(exp,co);

                      i--;

                  }

             }

             // stores the coefficient at index(exp)

             void addATerm(int exp,int co)

             {

                  // store the coefficient at index(exp)

                  polynomial[exp]=co;

             }

             int getHigh()

             {

                  return highExp;

             }

             @Override

        //Adds two polynomials and returns the resultant polynomial

             public PolynomialInterface add(PolynomialInterface other)

             {

                  int high;

                  ArrayWithExponentAsIndexPolynomial temp=new ArrayWithExponentAsIndexPolynomial();

                  ArrayWithExponentAsIndexPolynomial otherPoly=(ArrayWithExponentAsIndexPolynomial)other;

                  if(this.getHigh()<otherPoly.getHigh())

                  {

                      high=otherPoly.getHigh();

                      temp.highExp=otherPoly.getHigh();

                  }

                  else

                  {

                      high=this.getHigh();

                      temp.highExp=this.getHigh();

                  }

                  for(int i=0;i<=high;i++)

                  {

                      if(this.polynomial[i]!=0 && otherPoly.polynomial[i]!=0)

                      {

                           temp.polynomial[i]=this.polynomial[i]+otherPoly.polynomial[i];

                      }

                      else if (this.polynomial[i]==0 && otherPoly.polynomial[i]!=0)

                      {

                           temp.polynomial[i]=otherPoly.polynomial[i];

                      }

                      else if (this.polynomial[i]!=0 && otherPoly.polynomial[i]==0)

                      {

                           temp.polynomial[i]=this.polynomial[i];

                      }

                  }

                  return temp;

             }

             @Override

        //Substracts one polynomial from another and returns the resultant polynomial

             public PolynomialInterface subtract(PolynomialInterface other)

             {

                  int high;

                  ArrayWithExponentAsIndexPolynomial temp=new ArrayWithExponentAsIndexPolynomial();

                  ArrayWithExponentAsIndexPolynomial otherPoly=(ArrayWithExponentAsIndexPolynomial)other;

                  if(this.getHigh()<otherPoly.getHigh())

                  {

                      high=otherPoly.getHigh();

                      temp.highExp=otherPoly.getHigh();

                  }

                  else

                  {

                      high=this.getHigh();

                      temp.highExp=this.getHigh();

                  }

                  for(int i=0;i<=high;i++)

                  {

                      if(this.polynomial[i]!=0 && otherPoly.polynomial[i]!=0)

                      {

                           temp.polynomial[i]=this.polynomial[i]-otherPoly.polynomial[i];

                      }

                      else if (this.polynomial[i]==0 && otherPoly.polynomial[i]!=0)

                      {

                           temp.polynomial[i]=0-otherPoly.polynomial[i];

                      }

                      else if (this.polynomial[i]!=0 && otherPoly.polynomial[i]==0)

                      {

                           temp.polynomial[i]=this.polynomial[i];

                      }

                  }

                  return temp;

             }



             public String toString()

             {

                  String poly="";

                  //Convert the linked list into polynomial string

                  for(int i=this.getHigh();i>=0;i--)

                  {

                      if(polynomial[i]!=0)

                      {

                           if(i==1)

                           {

                                if(polynomial[i]<0)

                                     poly=poly+"-"+polynomial[i]*-1+"x";

                                else

                                     poly=poly+polynomial[i]+"x";

                           }

                           else if(i!=0)

                           {

                                if(polynomial[i]<0)

                                     poly=poly+"-"+polynomial[i]*-1+"x^"+i;

                                else

                                {

                                     if(i!=this.getHigh())

                                          poly=poly+"+"+polynomial[i]+"x^"+i;

                                     else

                                          poly=poly+polynomial[i]+"x^"+i;

                                }

                           }

                           else

                           {

                                if(polynomial[i]<0)

                                     poly=poly+"-"+polynomial[i]*-1;

                                else

                                     poly=poly+"+"+polynomial[i];

                           }



                      }

                  }

                  return poly;

             }


        }




    public class ArraySortedPolynomial implements PolynomialInterface

    {

        ArraySortedPolynomial()

         {



         }

         ArraySortedPolynomial(String pol)

         {

         }

    @Override

         public PolynomialInterface add(PolynomialInterface other) {

              // TODO Auto-generated method stub

              return null;

         }

         @Override

         public PolynomialInterface subtract(PolynomialInterface other) {

              // TODO Auto-generated method stub

              return null;

         }



    }


public class LinkedListInArrayPolynomial implements PolynomialInterface

{

     LinkedListInArrayPolynomial(String pol)

     {



     }

     @Override

     public PolynomialInterface add(PolynomialInterface other) {

          // TODO Auto-generated method stub

          return null;

     }

     @Override

     public PolynomialInterface subtract(PolynomialInterface other) {

          // TODO Auto-generated method stub

          return null;

     }



}



  public class PlynomialDemo
{
        public static void main(String[] args)
        {
                // example strings constructor must handle
                //      String s = "44";
                //      String s = "44x";
                //      String s = "4x^4+3x^3-3";
                //      String s = "4x^3-3x^11";
                //      String s = "44x^6-3x^10+4x^4";
                //      String s = "25x^5-3x^13+4x^12-78";
                //      String s ="34x^15-44x^14-3x^12+4x^31-78";
                //      String s1 = "44";
                //      String s2 = "44x-78";
                //      String s1 = "4x^4+3x^3-3";
                //      String s2 = "4x^6-3x^12";
                String s1 = "4x^14-3x^12+4x^4+78";
                String s2 = "-4x^4-3x^12+4x^17-78";
                //      String s1 = "4x^4+3x^11+4x^10";
                //      String s2 = "5x^14-3x^12+4x^19-78";
                //  String s1 = "4x^5+4x^4-3x^12-4x^41-78";
                //  String s2 = "-4x^4+3x^12+4x^41+78";
                // Four implementations of the interface
                PolynomialInterface exAsIndex1 = new ArrayWithExponentAsIndexPolynomial(s1);
                PolynomialInterface exAsIndex2 = new ArrayWithExponentAsIndexPolynomial(s2);
                PolynomialInterface exAsIndex3; 
                exAsIndex3 = exAsIndex1.add(exAsIndex2);
                System.out.println("First test is with array index as exponent. " );
                //      System.out.println("exAsIndex1 string is         " + s1);
                System.out.println("exAsIndex1 =                 " + exAsIndex1);
                //      System.out.println("exAsIndex2 string is         " + s2);
                System.out.println("exAsIndex2 =                 " + exAsIndex2);
                System.out.println("exAsIndex3 = exAsIndex1.add(exAsIndex2)      " + exAsIndex3);
                exAsIndex3 = exAsIndex1.subtract(exAsIndex2);
                //      System.out.println("exAsIndex1 string is         " + s1);
        //      System.out.println("exAsIndex1 =                 " + exAsIndex1);
                //      System.out.println("exAsIndex2 string is         " + s2);
                //System.out.println("exAsIndex2 =                 " + exAsIndex2);
                System.out.println("exAsIndex3 = exAsIndex1.subtract(exAsIndex2) " + exAsIndex3);
                System.out.println();

                PolynomialInterface sortA1 = new ArraySortedPolynomial(s1);
                PolynomialInterface sortA2 = new ArraySortedPolynomial(s2);
                PolynomialInterface sortA3; 
                sortA3 = sortA1.add(sortA2);
                System.out.println("Second test is sorted array of terms.");
                //      System.out.println("sortA1 string is           " + s1);
                System.out.println("sortA1 =                   " + sortA1);
                //      System.out.println("sortA2 string is           " + s2);
                System.out.println("sortA2 =                   " + sortA2);
                System.out.println("sortA3 = sortA1.add(sortA2)      " + sortA3);
                sortA3 = sortA1.subtract(sortA2);
                //      System.out.println("sortA1 string is           " + s1);
                //System.out.println("sortA1 =                   " + sortA1);
                //      System.out.println("sortA2 string is           " + s2);
                //System.out.println("sortA2 =                   " + sortA2);
                System.out.println("sortA3 = sortA1.subtract(sortA2) " + sortA3);
                System.out.println();

                PolynomialInterface link1 = new LinkListPolynomial(s1);
                PolynomialInterface link2 = new LinkListPolynomial(s2);
                PolynomialInterface link3;
                System.out.println("Third test is linked list of terms.");
                //      System.out.println("link1 string is       " + s1);
                System.out.println("link1 =               " + link1);
                //      System.out.println("link2 string is       " + s2);
                System.out.println("link2 =               " + link2);
                link3 = link1.add(link2);
                System.out.println("sum of link1 and link2 = " + link3);
                //      System.out.println("link1 string is       " + s1);
        //      System.out.println("link1 =               " + link1);
                //      System.out.println("link2 string is       " + s2);
                //System.out.println("link2 =               " + link2);
                link3 = link1.subtract(link2);
                System.out.println("link1 minus link2 =      " + link3);

                System.out.println();
                PolynomialInterface linkInArray1 = new LinkedListInArrayPolynomial(s1);
                PolynomialInterface linkInArray2 = new LinkedListInArrayPolynomial(s2);
                PolynomialInterface linkInArray3 = new LinkedListInArrayPolynomial(s2);
                System.out.println("Forth test is linked list of terms in an array.");
                //System.out.println("linkInArray1 string is       " + s1);
                System.out.println("linkInArray1 =               " + linkInArray1);
                //      System.out.println("linkInArray2 string is       " + s2);
                System.out.println("linkInArray2 =               " + linkInArray2);
                linkInArray3 = linkInArray1.add(linkInArray2);
                System.out.println("sum of linkInArray1 and linkInArray2 = " + linkInArray3);
                linkInArray3 = linkInArray1.subtract(linkInArray2);
                System.out.println("linkInArray1 minus linkInArray2 =      " + linkInArray3);
        }
}

输出:

First test is with array index as exponent. 
exAsIndex1 =                 4x^14-3x^12+4x^4+78
exAsIndex2 =                 4x^17-3x^12-4x^4-78
exAsIndex3 = exAsIndex1.add(exAsIndex2)      4x^17+4x^14-6x^12
exAsIndex3 = exAsIndex1.subtract(exAsIndex2) -4x^17+4x^14+8x^4+156

Second test is sorted array of terms.
sortA1 =                   ArraySortedPolynomial@139a55
sortA2 =                   ArraySortedPolynomial@1db9742
sortA3 = sortA1.add(sortA2)      null
sortA3 = sortA1.subtract(sortA2) null

Third test is linked list of terms.
link1 =               +4x^14-3x^12+4x^4+78
link2 =               +4x^17-3x^12-4x^4-78
sum of link1 and link2 = +4x^17+4x^14-6x^12
link1 minus link2 =      -4x^17+4x^14+8x^4+156

Forth test is linked list of terms in an array.
linkInArray1 =               LinkedListInArrayPolynomial@106d69c
linkInArray2 =               LinkedListInArrayPolynomial@52e922
sum of linkInArray1 and linkInArray2 = null
linkInArray1 minus linkInArray2 =      null

2 个答案:

答案 0 :(得分:0)

 ArraySortedPolynomial 

&安培;

LinkedListInArrayPolynomial

没有被定义..所以当然它们的价值是空的,系统会打印出它们存储的地址。

*您的帖子中未添加LinkListPolynomial,但它似乎对您有效*

   public class ArraySortedPolynomial implements PolynomialInterface

{

    ArraySortedPolynomial()

     {



     }

     ArraySortedPolynomial(String pol)

     {

     }

@Override

     public PolynomialInterface add(PolynomialInterface other) {

          // TODO Auto-generated method stub

          return null;

     }

     @Override

     public PolynomialInterface subtract(PolynomialInterface other) {

          // TODO Auto-generated method stub

          return null;

     }



}


public class LinkedListInArrayPolynomial implements PolynomialInterface

{

 LinkedListInArrayPolynomial(String pol)

 {



 }

 @Override

 public PolynomialInterface add(PolynomialInterface other) {

      // TODO Auto-generated method stub

      return null;

 }

 @Override

 public PolynomialInterface subtract(PolynomialInterface other) {

      // TODO Auto-generated method stub

      return null;

 }



}

我不打算为你做功课。定义实现Polynomial接口的这两个方法,然后它们将相应地工作

答案 1 :(得分:0)

它返回一个空指针,因为这是返回并存储在2个变量中的值:sortA3和linkInArray3,在方法add和subtract中。你的代码:

public PolynomialInterface add(PolynomialInterface other) {

      // TODO Auto-generated method stub

      return null;

 }

 @Override

 public PolynomialInterface subtract(PolynomialInterface other) {

      // TODO Auto-generated method stub

      return null;

 }

那么你还期望输出是什么呢?