2016-03-27 24 views
-1

Farz edelim alan1 üç içeriğe 2,3,4, area2 üç içeriğe 1,2,3 ve alan3'ün iki içeriğine 1,2 sahip olduğunu varsayalım. m, tuşların konumsal olduğu ve değerlerin contentid listesi olduğu haritadır. Örneğin, alan1 haritasına sahiptir (1, {2,3,4}). Her alan 1 içerik seçer ve tüm kombinasyonları bulur. Bu sorunu çözmek için dfs (recursion) kullanıyorum ancak line1'de bir nullpointerexception var. Arabirim bir dize listesidir ve listeden geçiyorum ve bunların türleri her ikisi de dize, neden boş bir işaretçi istisnası var? Bu, nullpointerexception'da özel bir durumdur ve iki kopya değildir.Nullpointerexception derinlemesine ilk arama gerçekleştirdiğimde

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

Yığın izlemeyi gönderin. – elhefe

+0

Yığını kullanmadım, özyinelemeyi kullanıyorum. @elhefe – KKKK

+0

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

cevap

2

Buradaki sorunun olduğunu tahmin: o null dönmelidir

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

, digits.charAt(0) numarayı ayıklamak için substring veya burada Character.toString( kullanmaya gerek bir String

olmadığından

+0

Güzel yakalama !!!!! – KKKK

+0

ve hatta yığın izi olmadan: D ama ciddi olarak, yığın izleme ve hata ayıklayıcısına aşina olmanız gerekir, bu hata ve hataları bulmanıza yardımcı olur – JohnnyAW

+0

Tamam. @JohnnyAW .. – KKKK