我正在研究一个问题,即得到一个映射(称为myMap),其中的键是作者的姓名,而值是作者与之共同发表文章的共同作者的姓名。我必须创建一个返回String数组的方法,该数组包含名为ERDOS的特定作者与其他作者之间的分离程度。为此,我已经编写了以下代码;我正在使用广度优先搜索。

   HashMap<String,Boolean> visitedMap= new HashMap<String,Boolean>();
   HashMap<String,Integer> distanceMap=new HashMap<String,Integer>();

     for(String name: myMap.keySet()){
         visitedMap.put(name, false);
     }
     for(String name:myMap.keySet()){
         distanceMap.put(name, -1);
     }
     distanceMap.put("ERDOS", 0);
     Queue<String> q= new LinkedList();
     q.add("ERDOS");
     visitedMap.put("ERDOS", true);


     int i=0;
     while(!q.isEmpty()){
         String a = q.remove();
         i=i+1;
         ArrayList<String> current= myMap.get(a);
         for(String z:current){
             System.out.println(current);
             System.out.println(visitedMap);
             if(visitedMap.get(current)==true){
                 q.add(z);
                 distanceMap.put(z, i);
                 visitedMap.put(z,true);
             }
             else{
                 break;
             }
         }
      }

      ArrayList<String> answer= new ArrayList<String>();
      for(String y:distanceMap.keySet()){
          answer.add("y"+" "+Integer.toString(distanceMap.get(y)));
      }
      String[] realAnswer= answer.toArray(new String[answer.size()]);
      Arrays.sort(realAnswer);
      return realAnswer;

}


但是,我在调用(visitedMap.get(current)== true)时始终收到空指针错误。此行之前的两个打印语句表明,当前确实存在于VisitedMap中,因此我真的不理解此空指针异常的原因。我真的很感谢您的帮助。
非常感谢!

最佳答案

currentArrayList<String>,而地图visitedMap中的键是String对象。因此,visitedMap.get(current)将始终返回null

您可能想使用:visitedMap.get(z)而不是visitedMap.get(current)

10-07 20:59