2012-03-28 17 views
0

2つの整数で構成される2つの多項式を追加する必要があります。例えば、係数および指数3x^2は、3および2をパラメータとして使用して構成されます。私はNullPointerExceptionを取得していますが、理由を理解できません。どんな助けもありがとう!多項式を追加しようとすると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); 
} 
} 

import javax.swing.JOptionPane;

/** * * @authorビルKraynek */ パブリッククラス多項式{

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

} 私はまだ

http://users.cis.fiu.edu/~kraynek/COP3337-assignments/Spring-2012/AssignmentFive-Polynomials-Spring-2012.html第二の方法を持っていけないので、いくつかの行が//あります

+0

例外が発生しているスタックトレースを提供できますか? –

+0

また宿題に[宿題]タグを付けてください。 –

+0

実際に何が起こっているのか、プログラムがどこに投げているのか、例外か、コンパイルしていないのかを知る必要があります。私は自分自身でそれをテストできるようにいくつかの主要な方法を含めて提案します。 –

答えて

2

ノードポインタ=ポリ;

デフォルトの多項式コンストラクタを呼び出すときにポリがインスタンス化されないため、アクセスできません。 (pointer.next == null)の場合

ヌルポインタをスロー{

:しかし、あなたの次の行があります。したがって、デフォルトのコンストラクタをそこでチェックするか、無効にする必要があります。

しかし、これはnullポインタ例外が存在する1つのケースです。あなたのメインクラスを提供できるなら、本当に助けになるでしょう。

//編集:あなたは、デフォルト以外のコンストラクタを公開し、そのいずれかを使用する場合は、あなたのコードは、そのまま使用することができる。

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

任意の例外なし。しかし、それは不必要に複雑なので、私はそれを再設計することを検討するだろう。

関連する問題