【问题标题】:Java- adding and subtracting polynmialsJava-加减多项式
【发布时间】:2017-04-28 03:26:56
【问题描述】:

所以我正在做这个项目并完成了,但我有一个问题是输出。这个项目涉及使用带有指数、链表和存储的数组来加减多项式

为什么我的第二次和第四次测试都为空。这是代码和输出 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

【问题讨论】:

  • add 方法执行的唯一代码块 --> return null;。你对add 方法的意图是什么?将提供的参数添加到某个列表中?
  • 你想了解minimal reproducible example。您的示例既不简单也不完整。
  • 除此之外:您的代码中有太多空行。垂直间距是编写可读代码的一个重要方面,但你做得过火了。
  • 请贴出无限码,方便我们回答

标签: java sorting add polynomials subtraction


【解决方案1】:

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

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;

 }

那么您还期望输出是什么?

【讨论】:

    【解决方案2】:
     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;
    
     }
    
    
    
    }
    

    我不会为你做作业。定义这两个实现您的多项式接口的方法,然后它们将相应地工作

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多