Java 尝试添加多项式时遇到NullPointerException

Java 尝试添加多项式时遇到NullPointerException,java,Java,我需要加上两个多项式,它由两个整数组成。例如,系数和指数3x^2将使用3和2作为参数构造。我得到了一个NullPointerException,但我不知道为什么。任何帮助都将不胜感激 public class Polynomial { private Node poly; public Polynomial() { } private Polynomial(Node p) { poly = p; } private class Term { int coefficien

我需要加上两个多项式,它由两个整数组成。例如,系数和指数3x^2将使用3和2作为参数构造。我得到了一个NullPointerException,但我不知道为什么。任何帮助都将不胜感激

public class Polynomial {

private Node poly;

public Polynomial() {
}

private Polynomial(Node p) {
    poly = p;
}

private class Term {

    int coefficient;
    int exponent;

    private Term(int coefficient, int exponent) {
        this.coefficient = coefficient;
        this.exponent = exponent;
    }
}

private class Node {

    private Term data;
    private Node next;

    private Node(Term data, Node next) {
        this.data = data;
        this.next = next;
    }
}

public void addTerm(int coeff, int exp) {
    Node pointer = poly;
    if (pointer.next == null) {
        poly.next = new Node(new Term(coeff, exp), null);
    } else {
        while (pointer.next != null) {
            if (pointer.next.data.exponent < exp) {
                Node temp = new Node(new Term(coeff, exp), pointer.next.next);
                pointer.next = temp;
                return;
            }

            pointer = pointer.next;
        }
        pointer.next = new Node(new Term(coeff, exp), null);
    }

}

public Polynomial polyAdd(Polynomial p) {
    return new Polynomial(polyAdd(this.poly, p.poly));

}

private Node polyAdd(Node p1, Node p2) {
    if (p1 == p2) {
        Term adding = new Term(p1.data.coefficient + p2.data.coefficient,
                p1.data.exponent);
        p1 = p1.next;
        p2 = p2.next;
        return new Node(adding, null);
    }
    if (p1.data.exponent > p2.data.exponent) {
        p2 = p2.next;

    }
    if (p1.data.exponent < p2.data.exponent) {
        p1 = p1.next;

    }
    if (p1.next != null && p2.next != null) {
        return polyAdd(p1, p2);


    }
    return new Node(null, null);
}
}
} 有些行是//因为我还没有第二种方法

节点指针=多边形

由于在调用默认多项式构造函数时poly未实例化,因此无法访问它。但你的下一行是:

if(pointer.next==null){

它会抛出一个空指针。因此,您应该检查或禁用默认构造函数

但这只是出现空指针异常的一种情况。如果您能提供您的主类,这将非常有帮助

//编辑:如果您将非默认构造函数公开并使用该构造函数,则您的代码可能会被用作:


没有任何例外。但是我会考虑重新设计它,因为它是不必要的复杂。

你能提供你得到异常的堆栈跟踪吗?同时,请添加[作业]。标记家庭作业。我们需要知道实际发生了什么,以及您的程序在哪里抛出和异常或未编译。我还建议包括一些主方法,以便我们可以自己测试。哪一行导致空指针?
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Polynomial p1 = new Polynomial();
    Polynomial p2 = new Polynomial();
    Polynomial p0 = new Polynomial();
    p1.addTerm(5, 2);
    p1.addTerm(4, 5);
    p1.addTerm(3, 3);
    p1.addTerm(1, 2);
    p1.addTerm(5, 6);
    p2.addTerm(3, 8);
    p2.addTerm(2, 5);
    p2.addTerm(1, 3);
    Polynomial p3 = p1.polyAdd(p2);
    JOptionPane.showMessageDialog(null, "p1 is " + p1 + "\np2 is " + p2 + "\np1+p2 is " + p3);
 // Polynomial p4 = p1.polyMultiply(p2);
//    JOptionPane.showMessageDialog(null, "p1 is " + p1 + "\np2 is " + p2 + "\np1*p2 is " + p4);
//    Polynomial p5 = p2.polyMultiply(p2);
    //JOptionPane.showMessageDialog(null, "p2 is " + p2 + "\np2*p2 is " + p5);
  //  Polynomial p6 = p0.polyMultiply(p2);
    //JOptionPane.showMessageDialog(null, "p0 is " + p0 + "\n" + "p2 is " + p2 + "\np0*p2 is " + p6);
    Polynomial p7 = p0.polyAdd(p2);
    JOptionPane.showMessageDialog(null, "p0 is " + p0 + "\n" + "p2 is " + p2  + "\np0+p2 is " + p7);
    p1 = p1.polyAdd(p2);
    JOptionPane.showMessageDialog(null, "After p1 = p1+p2  p1 is " + p1);
  //  p2 = p2.polyMultiply(p2);
    JOptionPane.showMessageDialog(null,"After p2 = p2*p2  p2 is " + p2);
}
    Polynomial p = new Polynomial(new Node(new Term(3, 2), null));
    Polynomial p2 = new Polynomial(new Node(new Term(3, 2), null));
    p.polyAdd(p2);