2017-03-16 85 views
-1

以下代码中的语句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

如果您指定的表达式生成'NullPointerException'那么肯定是因为'adjacentNodes.get( nodeId)'返回'null'。特别要注意,'null'是一个完全不同的野兽,从非空引用到一个空的'Map'。 –

+0

谢谢,但我该如何解决它?我用isEmpty函数检查这个问题,这是错误的吗? – JavaDev

+0

@Timothy Truckle,谢谢,但那个话题对我来说不会有用。 – JavaDev

回答

1

这东阳adjacentNodes为空,导致以NPE.Before该行尝试打印相邻节点的值。希望这有助于。

+0

谢谢,我知道,但我该如何解决它? – JavaDev

+0

!adjacentNodes.isEmpty()或!= null –

1

试试这个if (adjacentNodes.get(nodeId) != null && !adjacentNodes.get(nodeId).isEmpty()) {

0

我将不胜感激,如果有人帮我解释一下这是什么说法的问题:

if (!adjacentNodes.get(nodeId).isEmpty()) 

这种说法导致“显示java.lang.NullPointerException”

根据您发布的代码或者adjacentNodesnull或它不包含当前由nodeId引用的密钥。

您必须检查adjacentNodes不是null在该行之前。

如果adjacentNodes不是你应该使用Java8的Map类的getOrDefault()方法(https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-

if(!adjacentNodes.getOrDefault(nodeId, Collections.emptySet()).isEmpty())){ //...