下記のグループA, B, Cがあるとします。
グループA:①~③
グループB:①~⑤
グループC:③~⑧
すべての組み合わせを考える場合は、
for(int i=1;i<=3;i++){ //グループA
for(int j=1;j<=5;j++){ //グループB
for(int k=3;k<=8;k++){ //グループC
//処理
}}}
として、グループの数だけfor文を作成すれば処理が可能です。
質問ですが、グループの数が分からない場合は、for文をn個作成する必要がありますが、代替の手段はあるでしょうか。
予め最大数のfor文を作っておけば、出来なくはないですが。
多くの回答有難うございました。
取り敢えず、再帰を使わないバージョンでは、下記で動きました。
再帰を使った方がラクですね。
public static void Tree_2(){ int data[][] = { {1,2} ,{3,4,5} ,{6,7,8} ,{9,10,11,12} ,{13,14} ,{15} }; // System.out.println(data.length); List<Integer>[] list = new ArrayList[data[0].length]; List<Integer>[] listPre = new ArrayList[data[0].length]; for(int j=0;j<data[0].length;j++){ listPre[j] = new ArrayList<Integer>(); listPre[j].add(data[0][j]); } list[0] = new ArrayList<Integer>(listPre[0]); for(int i=1;i<data.length;i++){ int num=0; list = new ArrayList[data[i].length*listPre.length]; for(int j=0;j<listPre.length;j++){ for(int k=0;k<data[i].length;k++){ list[num] = new ArrayList<Integer>(listPre[j]); list[num].add(data[i][k]); // System.out.println(num + ":" + list[num]); num++; }} //コピー listPre = new ArrayList[list.length]; for(int j=0;j<list.length;j++){ listPre[j] = new ArrayList<Integer>(list[j]); // System.out.println(j + ":" + list[j]); } // System.out.println("----------------------------------"); } }
回答9件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/08 05:14