所以我正在做这个项目及其完成,但我有一个问题就是输出。这个项目涉及使用带有指数,链表和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
答案 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;
}
那么你还期望输出是什么呢?