2012-03-28 7 views
0

Ich muss zwei Polynome hinzufügen, die aus zwei Ints besteht. Zum Beispiel würden der Koeffizient und der Exponent 3x^2 unter Verwendung von 3 und 2 als Parameter konstruiert werden. Ich bekomme eine NullPointerException, aber ich kann nicht herausfinden warum. Jede Hilfe wäre willkommen!Encountering NullPointerException beim Versuch, Polynome hinzuzufügen

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); 
} 
} 

Import javax.swing.JOptionPane;

/** * * @author Bill Kraynek */ public class Polynomials {

/** 
* @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); 
} 

} einige Zeilen sind // weil ich nicht die zweite Methode haben noch

http://users.cis.fiu.edu/~kraynek/COP3337-assignments/Spring-2012/AssignmentFive-Polynomials-Spring-2012.html

+0

Können Sie den Stack-Trace angeben, wo Sie die Ausnahme erhalten? –

+0

Fügen Sie auch den Tag [homework] bei den Hausaufgaben hinzu. –

+0

Wir müssen wissen, was tatsächlich passiert und wo Ihr Programm wirft und Exception oder nicht kompilieren. Ich würde auch vorschlagen, eine Art von Hauptmethode einzuschließen, damit wir es selbst testen können. –

Antwort

2

Knotenzeiger = Poly;

Da Poly beim Aufruf des standardmäßigen Polynomkonstruktors nicht instanziiert wird, können Sie nicht darauf zugreifen. Aber Ihre nächste Zeile ist:

if (pointer.next == null) {

, die einen Null-Zeiger wirft. Sie sollten also entweder dort nachschauen oder den Standardkonstruktor deaktivieren.

Aber das ist nur ein Fall, in dem eine Nullzeigerausnahme vorliegt. Es würde wirklich helfen, wenn Sie Ihre Hauptklasse zur Verfügung stellen könnten.

// edit:

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); 

ohne Ausnahmen: Wenn Sie den Nicht-Standard-Konstruktor öffentlich machen und diese verwenden, können Sie den Code als solche verwendet werden. Aber ich würde darüber nachdenken, es neu zu gestalten, da es unnötig kompliziert ist.

Verwandte Themen