2012-12-05 22 views
-1

我似乎無法找到寫入類的數組的正確方法。在這種形式下編譯時不會引發錯誤,但是當我嘗試使用數組/類時會收到錯誤。類的陣列是在一個名爲Hashtable類(我需要寫我自己的工作分配),我用下面的代碼測試它:類的數組(Java)

theHashTable.insert("aa", "ab"); 

這裏是Hashtable類:

編輯:正如Aniket指出的那樣,fileNames沒有被初始化。我糾正了下面的錯誤,但收到了同樣的錯誤。在Values

private class HashTable {  
    private class Value { 
     ArrayList<String> fileNames; 
     String word; 
     Value() { 
      fileNames = new ArrayList<String>(); 
     } 
    } 

    private int currentSize = 101; 
    private Value[] items; 
    private HashTable() { 
     items = new Value[currentSize]; 
     for (int i = 0; i < currentSize; i++) items[i] = new Value(); 
    } 

    private int hash(String in) { 
     int out = 0; 
     for (int i = 0; i < in.length(); i++) out += 37*out+in.charAt(i); 
     out %= currentSize; 
     if (out < 0) out += currentSize; 
     return out; 
    } 

    public void insert(String inW, String inF) { 
     int index = hash(inW); 
     index = 0; 
     if (items[index].word.length() == 0) { 
      items[index].word = inW; 
      items[index].fileNames.add(inF); 
     } 
     else if (items[index].word.compareTo(inW) == 0) items[index].fileNames.add(inF); 
     else System.out.println("Collision"); 
    } 
} 
+1

請張貼堆棧跟蹤,或者你看到更好的答案確切的錯誤。 –

+0

異常線程 「main」 顯示java.lang.NullPointerException 在DirHashSearch $ HashTable.insert(DirHashSearch.java:165) 在DirHashSearch.tokenSearch(DirHashSearch.java:54) 在DirHashSearch.main(DirHashSearch.java:20) – asimes

回答

2

fileNames ArrayList中從未初始化。編寫Values的構造函數並初始化爲fileNames

+0

謝謝,忽略了。不幸的是,我仍然有錯誤 – asimes

+0

@asimes - 您的_Value_構造函數不初始化名爲_word_的變量。這會在您嘗試調用_word.length()_時引發NullPointerException異常。 – jahroy

1

與初始化(在你的示例代碼行3)你的內部類值申報fileNames爲:

 ArrayList<String> fileNames = new ArrayList<String>(); 
+0

同樣的結果。我很確定我的第3行和第6行的含義與 – asimes

+1

相同@asimes - 您需要在_Value_構造函數中初始化_word_。否則它將爲空,當您嘗試調用_word.length()_時,它將引發NullPointerException。 – jahroy

+0

@jahroy,就是這樣!謝謝 – asimes