当我执行深度优先搜索时,Nullpointerexception

时间:2016-03-27 00:39:31

标签: java recursion nullpointerexception depth-first-search

假设area1有三个内容2,3,4,area2有三个内容1,2,3,area3有两个内容1,2。 m是键是locationid的映射,值是contentid的列表。例如,area1具有地图(1,{2,3,4})。每个区域选择1个内容并找到所有组合。我使用dfs(递归)来解决这个问题,但是在line1中有一个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);
}

1 个答案:

答案 0 :(得分:2)

我想问题出在这里:

return m.get(digits.charAt(0));

它应该返回null,因为digits.charAt(0)不是String

您需要在此使用substringCharacter.toString(来提取数字