サイコロを振るモジュールを作成しています。y 面の x ダイスが与えられた場合、考えられるすべてのロールの組み合わせのリストを作成しようとしています。
このコードは、それぞれ 1、2、3 のラベルが付いた 3 つの面を持つ 3 つのサイコロを想定しています (「マジック ナンバー」を使用していることは認識していますが、これは基本コードを単純化して機能させるための試みにすぎません)。
int[] set = { 1, 1, 1 };
list = diceroll.recurse(0,0, list, set);
...
public ArrayList<Integer> recurse(int index, int i, ArrayList<Integer> list, int[] set){
if(index < 3){
// System.out.print("\n(looping on "+index+")\n");
for(int k=1;k<=3;k++){
// System.out.print("setting i"+index+" to "+k+" ");
set[index] = k;
dump(set);
recurse(index+1, i, list, set);
}
}
return list;
}
(dump() は list[] の内容を表示するだけの簡単な方法です。変数iは現在使用されていません。)
私がやろうとしているのは、list[index] を 1 ずつインクリメントし、リスト全体の長さをステップ実行し、進むにつれてインクリメントすることです。
これは私の「最善の試み」のコードです。出力は次のとおりです。
大胆な出力は、私が探しているものです。残りを取り除く方法がわかりません。(これは、それぞれ 3 つの面を持つ 3 つのサイコロを想定しています。再帰を使用して、y 面を持つ任意の x サイコロにスケールアップできます。)
[1][1][1] [1][1][1]
[1][1][1] [1][1][2] [1][1][3] [1][2][3]
[1][2][1] [1][2][2] [1][2][3] [1][3][3]
[1][3][1] [1][3][2] [1][3][3] [2][3][3] [2][1][3]
[2][1][1] [2][1][2] [2][1][3] [2][2][3]
[2][2][1] [2][2][2] [2][2][3] [2][3][3]
[2][3][1] [2][3][2] [2][3][3] [3][3][3] [3][1][3]
[3][1][1] [3][1][2] [3][1][3] [3][2][3]
[3][2][1] [3][2][2] [3][2][3] [3][3][3]
[3][3][1] [3][3][2] [3][3][3]
書式設定についてお詫び申し上げます。
どんな助けでも大歓迎です。(この方法は、実際には非常に些細なことにデータを使用するために端を発していましたが、個人的な課題になりました。:)
編集: この問題を解決するための別のアプローチがある場合、私はすべて耳を傾けますが、現在の問題を解決し、再帰を何か有用なものにうまく使用したいと考えています.
edit2: 「簡単な修正」を含む実行中のコード。未使用の変数と奇妙なハックに注意してください。まだクリーンアップしていません。
package code.testing;
import java.util.ArrayList;
public class CodeTesting {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
int[] set = { 1, 1, 1 };
list = recurse(0,0, list, set);
}
public static ArrayList<Integer> recurse(int index, int i, ArrayList<Integer> list, int[] set){
if(index < 3){
// System.out.print("\n(looping on "+index+")\n");
for(int k=1;k<=3;k++){
// System.out.print("setting i"+index+" to "+k+" ");
set[index] = k;
if (index==2){
dump(set);
}
recurse(index+1, i, list, set);
}
}
return list;
}
static void dump(int[] arr) {
for (int s : arr) {
System.out.format("[%s]", s);
}
System.out.println();
}
}