链表中查找字符的 NullPointerException


public class LString{
   char data;      //chars stored in this node
   LString next;   //link to next LString node 
  public LString(char newdata){
     data = newdata;
  }
  public LString(char newdata, LString newnext){
     data = newdata;
     next = newnext;
  }
  public LString(){
  }
  //create a front of list
  LString front;
  //create length of list
  int length;
  /*Construct an LString object. The LString object will represent the
  same list of chars as original. That is, the newly created LString is a
  "copy" of the parameter original.*/
  public LString(String original){
     LString curr = front;
     for(int i = 0; i < original.length(); i++){
        curr.data = original.charAt(i);
        curr = curr.next;
        length++;
     }
  }
}
public class test{
     public static void main(String[] args){
        LString myList = new LString("hi");
     }
}

下面的代码应该将字符串"hi"放入字符的链接列表中,其中每个字母 hi 都是列表的一个节点。运行时,它会给出一个指向行curr.data = original.charAt(i);的空指针异常。为什么那里有空指针异常?谢谢

在你的循环中:

public LString(String original){
 LString curr = front;
 for(int i = 0; i < original.length(); i++){
    curr.data = original.charAt(i);
    curr = curr.next;
    length++;
 }

}

第一次迭代时,您将curr.data设置为原始字符串中的第一个字符。然后,将curr设置为 curr.next 处的值 - 即 null。

因此,第二次迭代,当您尝试访问 curr.data 时,curr 为 null,因此将引发异常。

您需要考虑到在字符串的第一个字符上,您尚未设置front,因此接下来设置还为时过早。更改代码以检查第一个元素,在这种情况下不要设置下一个元素:

public LString(String original){
  LString curr = null;
  for(int i = 0; i < original.length(); i++){
    char ch = original.charAt(i);
    if(i == 0){
        front = new LString(ch);
        curr = front;
    }
    else{
        curr.next = new LString(ch);
        curr = curr.next;
    }
    length++;
  }
}

相关内容

  • 没有找到相关文章

最新更新