我想用哈希表實現一個字典(不使用Java提供的哈希表類,而是從頭開始)。下面是我的Dictionary類的find()
方法,用於檢測插入/移除時表中是否存在鍵。如果鍵已經在表中,則返回與鍵相關聯的分數(表中的元素作爲鍵/分值插入到每個表位置中的LinkedLists中)。如果不是,則返回-1。爲什麼這個數組給出一個空指針異常?
我正在運行一個提供的測試程序來確定我的Dictionary類是否工作,但在達到某個點時遇到NullPointerException
。下面包含的是特定的測試。爲什麼這個例外會出現? (如果需要,我可以提供更多的代碼!)
查找:
public int find(String config) {
for (int i = 0; i < dictSize; i++) {
if (dict[i] != null) {
LinkedList<DictEntry> current = dict[i];
String currentConfig = current.peek().getConfig(); //Dictionary.java:66
if (currentConfig.equals(config)) {
int currentScore = current.peek().getScore();
return currentScore;
}
}
}
return -1;
}
插入:
public int insert(DictEntry pair) throws DictionaryException {
String entryConfig = pair.getConfig();
int found = find(entryConfig); //Dictionary.java:27
if (found != -1) {
throw new DictionaryException("Pair already in dictionary.");
}
int entryPosition = hash(entryConfig);
if (dict[entryPosition] == null) { //Dictionary.java:35
LinkedList<DictEntry> list = new LinkedList<DictEntry>();
dict[entryPosition] = list;
list.add(pair);
return 0;
} else {
LinkedList<DictEntry> list = dict[entryPosition];
list.addLast(pair);
return 1;
}
}
測試:
// Test 7: insert 10000 different values into the Dictionary
// NOTE: Dictionary is of size 9901
try {
for (int i = 0; i < 10000; ++i) {
s = (new Integer(i)).toString();
for (int j = 0; j < 5; ++j) s += s;
collisions += dict.insert(new DictEntry(s,i)); //TestDict.java:69
}
System.out.println(" Test 7 succeeded");
} catch (DictionaryException e) {
System.out.println("***Test 7 failed");
}
異常堆棧跟蹤:
Exception in thread "main" java.lang.NullPointerException
at Dictionary.find(Dictionary.java:66)
at Dictionary.insert(Dictionary.java:27)
at TestDict.main(TestDict.java:69)
請張貼您的異常堆棧跟蹤。 – sakthisundar
以及帖子插入方法代碼 – zaffargachal
什麼是'dict'? –