2016-03-27 17 views
-1

area1に3つの内容2,3,4があり、area2に3つの内容1,2,3があり、area3に2つの内容1,2があるとします。 mはキーがlocationidであり、値がcontentidのリストであるマップです。たとえば、area1にはマップ(1、{2,3,4})があります。各エリアは1つのコンテンツを選択し、すべての組み合わせを検索します。私はこの問題を解決するためにdfs(再帰)を使いますが、line1にはnullpointerexceptionがあります。中間体は文字列のリストであり、リストを反復し、その型は両方とも文字列です。なぜnullポインタ例外がありますか?これは、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)); 

digits.charAt(0)は、あなたが数

を抽出するためにここに substringまたは Character.toString(を使用する必要が String

ではないので、それは、nullを返す必要があります

+0

ニースキャッチ!!!!! – KKKK

+0

、さらにはスタックトレースなし:Dでも真剣にスタックトレースとデバッガに慣れておくと、バグやエラーを見つけるのに役立ちます – JohnnyAW

+0

Ok。 @JohnnyAW .. – KKKK

関連する問題