2012-01-28 10 views
0

これは宿題ですが、私はどんな種類の答えにも感謝します。オブジェクトがインスタンス化されたときのNullPointerException

私がequalsメソッドを呼び出すと、なぜNullPointerExceptionを取得し続けるのか理解しようとしています。私は間違っていないとオブジェクトをインスタンス化しましたが、それでも動作しません。

Exception in thread "main" 8 
java.lang.NullPointerException 
    at labbfyra.TextBuilder.equals(TextBuilder.java:69) 
    at labbfyra.SkapaOrd.main(SkapaOrd.java:17) 

これはスタックトレースですか?

public class TextBuilder { 

    private static class Node{ 
     public char inChar; 
     public Node next; 

     public Node(char c, Node nästa){ 
      inChar = c; 
      next = nästa; 

     } 
    } 

    private Node first = null; 
    private Node last = null; 

    public TextBuilder(){ 
     first = null; 
     last = null; 
    } 

    public void append(String s){ 
     int x = s.length(); 
     for(int i=0;i<x;i++){ 


      Node n = new Node(s.charAt(i),null); 


      if(first ==null){ 
       first = n; 
       last = n; 

      }else{ 
       last.next = n; 
       last = n; 

      } 
     } 
    } 

    public int ShowSize(){ 
     int counter = 0; 

     Node n = first; 
     while(n!=null){ 
      counter++; 
      n=n.next; 
     } 
     return counter; 
    } 

    public boolean equals(String s){ 

     boolean eq = false; 
     int counter = 0; 
     char[] cArray = s.toCharArray(); 
     char[] cArrayComp = new char[10]; 


     Node n = first; 
     cArrayComp[counter] = n.inChar; 

     while(n!=null){ 
      counter++; 
      n=n.next; 
      cArrayComp[counter] = n.inChar; //THIS IS LINE 69 
     } 
     if(cArrayComp==cArray){ 
       eq = true; 
     } 
     else{ 
      eq=false; 
     } 
     return eq; 
    } 
} 
+0

あなたのスタックトレースをポストするので、正確にあなたはnullpointerを取得しています。 –

+0

私は投稿を編集しました。正しい情報があれば教えてください。 – user1159186

+0

問題は、例外で述べたように69行目です。私はあなたのコードの行69であることを見ることができません –

答えて

0

whileループのカウンタ変数がcArrayCompサイズを10に設定しているようです。おそらく渡される文字列パラメータが10文字よりも長いですか?

+0

Iveはその値を変更しようとしましたが、私の文字列は7文字長いです。しかし、それは私にnullpointerexceptinを与えるべきですか?それは私にindexoutofbound例外を与えるべきではありませんか? – user1159186

0
public boolean equals(String s){ 

    boolean eq = false; 
    int counter = 0; 
    char[] cArray = s.toCharArray(); 

    char[] cArrayComp = new char[10]; 


    Node n = first; 

    while(n!=null){ 
     System.out.println(counter); 


     cArrayComp[counter] = n.inChar; 

     System.out.println(cArrayComp[counter]); 
     System.out.println(n.inChar); 

     n=n.next; 
     counter++; 

    } 
    if(cArrayComp==cArray){ 
      eq = true; 
    } 
    else{ 
     eq=false; 
    } 
    return eq; 
} 

これは修正されたバージョンです。ループにバグが見つかりました。ちょうど私のバージョンをチェックする。 Works on 100%

+0

説明:これは、ループの前にn.firstを実行したためです。したがって、ループが開始されると、それは1だけシフトされます。 – Kursion

+0

は完全に機能しました。今問題が発生しています。大変ありがとうございました。 – user1159186

+0

+1を忘れないでください:D!キッド – Kursion

1

whileループでは、nがnullではないことを確認してから、nにアクセスする直前にn.nextをnに代入します。問題は、割り当てられた値(n.next)がnullでないことを保証していないことです。

関連する問題