2013-11-22 66 views
0

當我調用我的方法來創建傳遞的參數的新字符串副本時,出現空指針異常。這個方法是從我的main調用的。方法的空指針異常

爲什麼我得到這個錯誤,我該如何解決它,所以它不指向空?

它說的錯誤是在這條線發生的事情:front.data = original.charAt(i);

,如果我改變大小爲-1它提供了有關該行back.next = newNode;

主要(方法的主要組成部分)的錯誤:

public class TestLString { 
    /** Main method */ 
    public static void main(String[] args) { 

     String str1 = "Hello, my name is Alphose!"; 
     LString lstr1 = new LString(str1); 

編輯:這似乎工作!

public LString(String original){ 
    size = 0; 
    for(int i = 0; i< original.length(); i++){ 
    if(original.length() == 0){        ///changed 
     front = new Node(); 
     front.data = original.charAt(i); 
     front.next = back; 
     size++; 
    } else{ 
      Node newNode = new Node(); 
      newNode.data = original.charAt(i); 
      Node back = new Node(); 
      back.next = newNode; 
      newNode.next = null; 
      back = newNode; 
     } 
    } 
    } 

我初始化的數據字段(對不起)。讓我知道如果我可以添加任何其他東西。

public class LString{ 


    private Node front = null; //first val in list 
    private Node back; //last val in list 
    private int size = 0; 
    private int i; 
    private int offset; 

    public LString(){ 
     //construct empty list 
     Node LString = new Node(); 
     front = null; 

    } 
+1

'front'和'size'從哪裏來?我有一種感覺,我們沒有全部的圖片 –

+1

從你的代碼和描述來看,最合理的解釋是'front'是空的。但正如@KevinBowersox所說的,我們無法看到'front'被初始化的位置。 –

+0

請提供堆棧跟蹤。幫助我們更快速地進行調試。 –

回答

2

如果你有

if (front == null) { front.data = ...; } 

這肯定是行不通的。如果front爲空,則無法爲其成員data指定值。

2

編輯

替代理論:

您需要在使用前進行初始化前:

front = new Node(); 
front.data = original.charAt(i); 
front.next = back; 
size++; 

原始理論

我猜的,與其

if(front == null){ 

你的意思

if(front != null){ 

因爲如果front爲空,則無法訪問其數據(front.data = ...)。