gpt4 book ai didi

java - 为什么这个数组会出现空指针异常?

转载 作者:行者123 更新时间:2023-12-01 17:28:52 24 4
gpt4 key购买 nike

我正在尝试用哈希表实现一个字典(不使用Java提供的哈希表类,而是从头开始制作)。下面是我的 Dictionary 类中的 find() 方法,用于在插入/删除时检测键是否在表中。如果键已在表中,则返回与键关联的分数(表中的元素作为键/分数对插入到每个表位置的 LinkedList 中)。如果不是,则返回-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)

最佳答案

peek() 返回 null 这就是原因。您可以在 getConfig() 调用之前进行无效检查。

关于java - 为什么这个数组会出现空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12908565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com