2012-01-28 47 views
0

這是一個家庭作業,我將不勝感激任何回答。當對象被實例化時出現NullPointerException

我試圖找出爲什麼我不斷得到一個NullPointerException當我調用equals方法。如果我沒有弄錯,我已經實例化了這個對象,但它仍然不起作用。

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

發佈你的stacktrace,所以我們知道你到底在哪裏得到空指針。 – 2012-01-28 12:08:44

+0

我編輯過這篇文章,請告訴我,如果這是正確的信息。 – user1159186 2012-01-28 12:20:27

+0

問題在第69行,正如例外所述。我無法看到代碼中的第69行。 – 2012-01-28 12:25:28

回答

0

快速一瞥,看起來像while循環中的計數器變量將超過10您設置您的cArrayComp大小。也許被傳遞的字符串參數比10個字符長?

+0

我試圖改變這個值,我的字符串是7個字符長。但是它應該給我一個nullpointerexceptin嗎?它應該給我一個indexoutofbound異常? – user1159186 2012-01-28 12:39:30

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

這是更正後的版本,我在你的循環中發現了一個錯誤。只需檢查我的版本。工作在100%

+0

解釋:這是因爲你在循環之前做了n.first。因此,當循環開始時,它將被移動1. – Kursion 2012-01-28 12:40:57

+0

完美運作,我現在看到了問題。十分感謝大家。 – user1159186 2012-01-28 12:46:52

+0

不要忘記+1:D!開玩笑 – Kursion 2012-01-28 12:56:54

1

在你的while循環中,你檢查n不是null,但是你在訪問n之前把n.next賦值給n。問題是您不確保分配的值(n.next)不爲空。

相關問題