多项式Java数组加减
我有下面的代码,除了尝试从一个多项式中减去另一个多项式时的多项式Java数组加减,java,arrays,polynomials,Java,Arrays,Polynomials,我有下面的代码,除了尝试从一个多项式中减去另一个多项式时的sub()函数外,所有代码似乎都工作正常 p4 = p1.sub(p2); 我看到了输出:x+3x^5-5x^8,而我希望看到:x-2x^3+7x^5-2x^7-5x^8。我无法找出我的代码有什么问题,非常感谢您的帮助。提前谢谢 public class Polynomial { public static final int MAX_NUMBER_OF_COEFFICIENTS = 30; private int[] coeffic
sub()
函数外,所有代码似乎都工作正常
p4 = p1.sub(p2);
我看到了输出:x+3x^5-5x^8
,而我希望看到:x-2x^3+7x^5-2x^7-5x^8
。我无法找出我的代码有什么问题,非常感谢您的帮助。提前谢谢
public class Polynomial {
public static final int MAX_NUMBER_OF_COEFFICIENTS = 30;
private int[] coefficients = new int[MAX_NUMBER_OF_COEFFICIENTS];
public Polynomial() {
}
public Polynomial(int coefficient, int exponent) {
coefficients[exponent] += coefficient;
}
public Polynomial(int[] newcoefficients) {
for (int i = 0 ; i < MAX_NUMBER_OF_COEFFICIENTS; i++) {
coefficients[i] += newcoefficients[i];
}
}
public void insert(int coefficient, int exponent) {
coefficients[exponent] += coefficient;
}
public Polynomial add(Polynomial otherPolynomial) {
for (int i = 0 ; i < MAX_NUMBER_OF_COEFFICIENTS; i++) {
if (otherPolynomial.coefficients[i] != 0)
this.coefficients[i] += otherPolynomial.coefficients[i];
}
return new Polynomial(this.coefficients);
}
public Polynomial sub(Polynomial otherPolynomial) {
for (int i = 0 ; i < MAX_NUMBER_OF_COEFFICIENTS; i++) {
if (otherPolynomial.coefficients[i] != 0)
this.coefficients[i] -= otherPolynomial.coefficients[i];
}
return new Polynomial(this.coefficients);
}
public void sub(int coefficient, int exponent) {
this.coefficients[exponent] -= coefficient;
}
public void remove(int exponent) {
coefficients[exponent] = 0;
}
public void printout() {
boolean firstPrint = false;
if (coefficients[0] != 0) {
System.out.print(coefficients[0]);
firstPrint = true;
}
for (int i = 1 ; i < MAX_NUMBER_OF_COEFFICIENTS; i ++) {
if (coefficients[i] != 0) {
if (firstPrint == false) {
System.out.print(coefficients[i] + "x^" + i);
firstPrint = true;
}
else {
System.out.print(" + " + coefficients[i] + "x^" + i);
}
}
}
System.out.println();
}
public static void main(String[] args) {
Polynomial p1 = new Polynomial(1,1);
Polynomial p2 = new Polynomial(2,3);
Polynomial p3 = new Polynomial();
Polynomial p4 = new Polynomial();
Polynomial p5 = new Polynomial(6,3);
try {
p1.insert(3,5);
p1.sub(5,8);
p1.printout();
p2.sub(4,5);
p2.add(new Polynomial(2,7));
p2.printout();
p3 = p1.add(p2);
p3.printout();
p4 = p1.sub(p2);
p4.printout();
p5.insert(2,5);
p5.remove(3);
p5.printout();
//p1.add(new Polynomial(2,-1));
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exponent cannot be negative. " + e);
}
}
}
公共类多项式{
公共静态最终整数最大数系数=30;
私有int[]系数=新int[系数的最大数量];
公共多项式(){
}
公共多项式(int系数,int指数){
系数[指数]+=系数;
}
公共多项式(int[]新系数){
对于(int i=0;i
在我看来很好你从线条开始
Polynomial p1 = new Polynomial(1,1);
基本上是1*x,然后你调用下面的行
p1.insert(3,5);
它将数组的索引5设置为3,因此现在您有1*x+3x^5和最后一次调用
p1.sub(5,8);
从数组的8索引值中减去5,现在就得到了
1x^1+3x^5+-5x^8对我来说很好你从线条开始
Polynomial p1 = new Polynomial(1,1);
基本上是1*x,然后你调用下面的行
p1.insert(3,5);
它将数组的索引5设置为3,因此现在您有1*x+3x^5和最后一次调用
p1.sub(5,8);
从数组的8索引值中减去5,现在就得到了
1x^1+3x^5+-5x^8该功能按预期工作。你不知道的是(也许你知道)当你调用
p3=p1.add(p2)
您将更改p1
,然后返回带有p1
系数的新多项式。因此,当您调用p4=p1.sub(p2)
时,您将得到与p3=p1.add(p2)
之前相同的p1
。
所以你所经历的更像是这样:
p3=p1*=p1+p2
p4=p1**=p1*-p2
其中p1*
是p1+p2
的结果。因此,你现在得到的是:
p4=p1*-p2=(p1+p2)-p2=p1
同样,如果要返回新的多项式,请不要更改现有的多项式
更改两个函数add(多项式..)
和sub(多项式..)
:
当你这样做的时候,你不能说p3.add(p1,p2)
。这会将您的主代码更改为:
p1.insert(3,5);
p1.sub(5,8);
p1.printout();
p2.sub(4,5);
p2.add(new Polynomial(2,7));
p2.printout();
p3 = Polynomial.add(p1, p2);
p3.printout();
p4 = Polynomial.sub(p1, p2);
p4.printout();
p5.insert(2,5);
p5.remove(3);
p5.printout();
如您所见,对于
p3
和p4
您将调用多项式。添加和多项式.sub
。通过理解数学。*
方法,您可以更好地理解这一点。所有Math
库都是static
,因此您无法创建它的实例,但可以说Math.abs
。。。这里是相同的概念,您可以调用多项式。添加
等函数按预期工作。你不知道的是(也许你知道)当你调用p3=p1.add(p2)
您将更改p1
,然后返回带有p1
系数的新多项式。因此,当您调用p4=p1.sub(p2)
时,您将得到与p3=p1.add(p2)
之前相同的p1
。
所以你所经历的更像是这样:
p3=p1*=p1+p2
p4=p1**=p1*-p2
其中p1*
是p1+p2
的结果。因此,你现在得到的是:
p4=p1*-p2=(p1+p2)-p2=p1
同样,如果要返回新的多项式,请不要更改现有的多项式
更改两个函数add(多项式..)
和sub(多项式..)
:
当你这样做的时候,你不能说p3.add(p1,p2)
。这会将您的主代码更改为:
p1.insert(3,5);
p1.sub(5,8);
p1.printout();
p2.sub(4,5);
p2.add(new Polynomial(2,7));
p2.printout();
p3 = Polynomial.add(p1, p2);
p3.printout();
p4 = Polynomial.sub(p1, p2);
p4.printout();
p5.insert(2,5);
p5.remove(3);
p5.printout();
如您所见,对于p3
和p4
您将调用多项式。添加
p1.add(p2).sub(p3)
public Polynomial add(Polynomial otherPolynomial) {
Polynomial result = new Polynomial();
for (int i = 0 ; i < MAX_NUMBER_OF_COEFFICIENTS; i++) {
if (otherPolynomial.coefficients[i] != 0)
result.coefficients[i] = this.coefficients[i] + otherPolynomial.coefficients[i];
}
return result;
}