【发布时间】:2017-03-16 13:19:23
【问题描述】:
下面代码中的if (!adjacentNodes.get(nodeId).isEmpty())语句有什么问题?
这样的陈述导致以下消息:
java.lang.NullPointerException
package IN.company;
import java.util.HashMap;
import java.util.HashSet;
public class DiffusionModels {
public int ICModel(int[] seedSet, HashMap<Integer, HashSet<Integer>> adjacentNodes, double p) {
HashSet<Integer> infected = new HashSet();
HashSet<Integer> recentlyInfected = new HashSet();
...
while (recentlyInfected.size() > 0) {
HashSet<Integer> nextActivator = new HashSet<>();
if (!recentlyInfected.isEmpty()) {
for (Integer nodeId : recentlyInfected) {
if (!adjacentNodes.get(nodeId).isEmpty()) {
HashSet<Integer> neighborsOfNode =adjacentNodes.get(nodeId) ;
for (Integer nodeNeighbor : neighborsOfNode) {
if ((Math.random() <= p)&& !(infected.contains(nodeNeighbor))) {
nextActivator.add(nodeNeighbor);
}
}
}
}
}
infected.addAll(recentlyInfected);
recentlyInfected.clear();
recentlyInfected.addAll(nextActivator);
}
return infected.size();
}
}
【问题讨论】:
-
如果您指定的表达式生成
NullPointerException,那肯定是因为adjacentNodes.get(nodeId)返回null。请特别注意,null与对空Map的非空引用完全不同。 -
谢谢,但我该如何解决呢?我用 isEmpty 函数检查了这个问题,是不是错了?
-
@Timothy Truckle,谢谢,但该主题对我没有用处。