执行深度优先搜索时出现 Nullpointerexception
Nullpointerexception when I perform depth first search
假设area1有3个内容2,3,4,area2有3个内容1,2,3,area3有2个内容1,2。 m是键是locationid,值是contentid列表的映射。例如,area1 有地图 (1,{2,3,4})。每个区域选择1个内容并找到所有组合。我使用 dfs(递归)来解决这个问题,但是在第 1 行中有一个 nullpointerexception。中间是一个字符串列表,我遍历列表,它们的类型都是字符串,为什么会出现空指针异常?这是 nullpointerexception 中的一个特定条件,它不是重复的。
public static List<String> dfs(String digits,Map<String, List<String>> m) {
List<String> result = new ArrayList<String>();
if(digits.length() == 0){
return result;
}
if(digits.length() == 1){
return m.get(digits.charAt(0));
}
List<String> intermediate = dfs(digits.substring(1, digits.length()),m);
for(String first : m.get(Character.toString(digits.charAt(0)))){
for(String rest : intermediate){ // line1
result.add(first + rest);
}
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String digits="123";
Map<String,List<String>> selected=new HashMap<>();
selected.put("1", new ArrayList<>(Arrays.asList("4","2","3")));
selected.put("2", new ArrayList<>(Arrays.asList("1","2","3")));
selected.put("3", new ArrayList<>(Arrays.asList("1","2")));
dfs(digits,selected);
}
我猜问题出在这里:
return m.get(digits.charAt(0));
它应该 return null
,因为 digits.charAt(0)
不是 String
你需要在这里使用substring
或Character.toString(
来提取号码
假设area1有3个内容2,3,4,area2有3个内容1,2,3,area3有2个内容1,2。 m是键是locationid,值是contentid列表的映射。例如,area1 有地图 (1,{2,3,4})。每个区域选择1个内容并找到所有组合。我使用 dfs(递归)来解决这个问题,但是在第 1 行中有一个 nullpointerexception。中间是一个字符串列表,我遍历列表,它们的类型都是字符串,为什么会出现空指针异常?这是 nullpointerexception 中的一个特定条件,它不是重复的。
public static List<String> dfs(String digits,Map<String, List<String>> m) {
List<String> result = new ArrayList<String>();
if(digits.length() == 0){
return result;
}
if(digits.length() == 1){
return m.get(digits.charAt(0));
}
List<String> intermediate = dfs(digits.substring(1, digits.length()),m);
for(String first : m.get(Character.toString(digits.charAt(0)))){
for(String rest : intermediate){ // line1
result.add(first + rest);
}
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String digits="123";
Map<String,List<String>> selected=new HashMap<>();
selected.put("1", new ArrayList<>(Arrays.asList("4","2","3")));
selected.put("2", new ArrayList<>(Arrays.asList("1","2","3")));
selected.put("3", new ArrayList<>(Arrays.asList("1","2")));
dfs(digits,selected);
}
我猜问题出在这里:
return m.get(digits.charAt(0));
它应该 return null
,因为 digits.charAt(0)
不是 String
你需要在这里使用substring
或Character.toString(
来提取号码