以下代码中的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();
}
}
答案 0 :(得分:1)
这个beacause adjacentNodes为null,这导致NPE。在该行尝试打印adjacentNodes的值之前。希望这会有所帮助。
答案 1 :(得分:1)
试试这个if (adjacentNodes.get(nodeId) != null && !adjacentNodes.get(nodeId).isEmpty()) {
答案 2 :(得分:0)
如果有人帮助我解释这句话的问题,我将不胜感激:
if (!adjacentNodes.get(nodeId).isEmpty())
此声明导致&#34; java.lang.NullPointerException&#34;
根据您发布的代码adjacentNodes
null ,或者它不包含nodeId
当前引用的密钥。
您必须在该行之前检查adjacentNodes
是否 null 。
如果adjacentNodes
不是 null ,您应该使用Java8的getOrDefault()
类(https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-)的Map
方法
if(!adjacentNodes.getOrDefault(nodeId, Collections.emptySet()).isEmpty())){ //...