2012-10-14 102 views
1

我想创建一个散列表,它将从我的数组中获取每个字符串并将其分配给唯一的整数值。我的数组从文件中读取并分配到阵列像这样:Array into HashTable

public void readFile() throws Exception{ 

    FileInputStream in = new FileInputStream("words.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

    String strLine; 
    wordsList = new String[getNumberOfLines()]; 

    for (int j = 0; j < wordsList.length; j++){ 
    wordsList[j] = br.readLine(); 

    } 
    in.close(); 
} 

使用这个数组我写的方法来创建哈希表是这样的:

String currentWord; 
private Hashtable <String,Integer> wordsHashTable; 
LinesReader lr = new LinesReader(); 
int i; 
String[] listOfWords; 

public boolean insertValues() throws Exception{ 
    for (i=0; i<lr.getNumberOfLines();i++){ 
     lr.readFile(); 
     listOfWords = lr.returnsWordList(); 
     currentWord = listOfWords[i]; 
     wordsHashTable.put(currentWord, i+1); 
    } 
    return wordsHashTable.isEmpty(); //testing purposes only 
} 

它抛出空指针异常在行:wordsHashTable.put (currentWord,i + 1); 任何想法,我搞砸了?

回答

3

您必须使用类的一个实例初始化wordsHashTable

private Hashtable <String,Integer> wordsHashTable = new Hashtable<>(); 

然而,做到注意,Hashtable类是过时的;您应该使用java.util.HashMap代替。

+0

谢谢!我不敢相信这是一个非常愚蠢的错误,并且对提示表示感谢(我们的讲师说我们应该在我们的任务中使用散列表,但将来会提供参考) – Shepard

0

您没有初始化`Hashtable'。

private Hashtable <String,Integer> wordsHashTable = new Hashtable <String,Integer>(); 

会解决它。

不过,我建议你转移到更现代的东西像HashMap

1

初始化您的哈希表。你忘了初始化它。

private Hashtable <String,Integer> wordsHashTable = new Hashtable<>();