多项式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;
}