2016-03-27 3 views
-1

Предположим, что область 1 имеет три содержания 2,3,4, площадь2 имеет три содержания 1,2,3, а площадь 3 имеет два содержания 1,2. m - это карта, в которой ключи являются locationid, а значения - это список contentid. Например, в области 1 есть карта (1, {2,3,4}). Каждая область выбирает 1 контент и находит всю комбинацию. Я использую dfs (рекурсия) для решения этой проблемы, но в строке 1 есть исключение nullpointer. Промежуточный элемент представляет собой список строк и i итерации по списку, и их типы являются строками, почему существует исключение с нулевым указателем? Это специфическое условие в исключении nullpointer, и оно не дублируется.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

Опубликовать трассировку стека. – elhefe

+0

Я не использовал стек, я использую рекурсию. @elhefe – KKKK

+0

https://en.wikipedia.org/wiki/Stack_trace – elhefe

ответ

2

Я думаю, проблема здесь:

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

он должен вернуть null, поскольку digits.charAt(0) не String

вам нужно использовать substring или Character.toString( здесь, чтобы извлечь номер

+0

Хороший улов !!!!! – KKKK

+0

и даже без трассировки стека: D, но серьезно, вам нужно познакомиться с трассировкой стека и отладчиком, это поможет вам найти ошибки и ошибки. – JohnnyAW

+0

Ok. @JohnnyAW .. – KKKK

Смежные вопросы