2012-05-03 19 views
0

配列の組み合わせの数(ArrayList)を積み重ねることを試みていますが、各行には指定された "HEIGHT"まで隣接する行に含まれる要素を入れることはできません。 。私はリストのリストを持っています。 "rowCombos"(グローバル)は、各行にできる要素のすべての可能な組み合わせです。私のコードは、上記の制約に従い、どの行のコンボが先行する行の上に置くことができるかを見るために、「rowCombos」を循環する必要があります。 「パネル」がHEIGHT入力パラメータに達すると、カウンタがインクリメントされ、再帰的メソッドから脱落するはずです。私が実行している問題はstackOverflowであり、どこでハングアップしているのかを見るためにデバッグを実行しました。それは、各スレッドは、メソッドの方法を使用しているようだ、そして、連続的な再帰呼び出しでハングアップします...誰かが私の問題がどこにスポット?Java - 無限再帰的ループ

public static void 
buildPanels(ArrayList<ArrayList<Float>> panel, int HEIGHT) 
{ 
    if (panel.size() == HEIGHT) 
    { 
     mainCount++; 
     return; 
    } 
    else 
    { 
     for (List<Float> row:rowCombos) 
     { 
      boolean duplicateFound = false; 
      if (!panel.isEmpty()) 
      { 
       for (Float element:row) 
       { 
        if (panel.get(panel.size() - 1).contains(element)) 
        { 
         duplicateFound = true; 
        } 
       } 
      } 
      if (panel.isEmpty() || !(duplicateFound)) 
      { 
       panel.add((ArrayList<Float>) row); 
       buildPanels(panel, HEIGHT); 
      } 
     } // end of for 
    } // end of else 
} // end of buildPanels 
+0

'List 'にはどのデータが含まれているかを知ることなく辿るのが難しい。 – Lion

+0

'System.out.println(...)'ステートメントはどこにありますか?あなたの問題をデバッグするのに役立つものがありますか? –

+0

可能(単純な)リストは {[3.0、6.0、9.0]、 [3.0、7.5]、 [4.5、7.5]、 [4.5、9.0]} あろう私は私の上のSystem.out代を持っています私が上に掲示したコードから取り除くと思ったのは、物事が乱雑になるからです。私は必要に応じて投稿することができます。 – Aaron

答えて

0

このコードは、stackoverflowを実行しようとしています。ロジックを読む:

は、パネルが空であると言うことができます....

  1. コールbuildPanel
  2. 設定duplicateFound

  3. falseにノー !(duplicateFound)、呼び出し buildPanel

    boolean duplicateFound = false; 
    if (!panel.isEmpty()) 
    { 
        for (Float element:row) 
        { 
         if (panel.get(panel.size() - 1).contains(element)) 
         { 
          duplicateFound = true; 
         } 
        } 
    } 
    if (panel.isEmpty() || !(duplicateFound)) 
    { 
        panel.add((ArrayList<Float>) row); 
        buildPanels(panel, HEIGHT); 
    } 
    
場合