2012-01-28 65 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)不为空。

相关问题