我正在研究一个问题,即得到一个映射(称为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中,因此我真的不理解此空指针异常的原因。我真的很感谢您的帮助。
非常感谢!
最佳答案
current
是ArrayList<String>
,而地图visitedMap
中的键是String
对象。因此,visitedMap.get(current)
将始终返回null
。
您可能想使用:visitedMap.get(z)
而不是visitedMap.get(current)
。