三目並べを表す2D配列があります。そして空のボックスはただの""; 私の現在のゲームボードは、2D文字列配列であるar1に保存されています。2D配列=3D配列の配列であるゲームボードの配列を作りたいです。だから私はそれがそのようになると思います:
String[][][]ar3 = new String[80][9][9]; // array of game boards
for(int k=0;k<ar3.length;k++)// filling the array with the current game board
{
ar3[k] = ar1;
}
ええ、私は80枚のボードが欲しいのですが、ゲームは9x9になります。今まではすべて問題ありませんでしたが、ゲームボード(ar1)を見て、ar3で可能な限りの動きをしたいと思います。だから、可能なすべての動きのために、私はar3にボードを手に入れました。そのために、ボード上の空のインデックスを含む配列を作成します。これは、ar2で可能なすべての移動です。
int[][]ar2 = new int[81][2]; // contains blank boxes indexes
int line = 0;
for(int k=0;k<SIZE;k++) //finds blank boxes indexes and adding to the array
for(int j=0;j<SIZE;j++,line++)
{
if(ar1[k][j].equals(""))
{
ar2[line][0] = k;
ar2[line][1] = j;
}
else
{
ar2[line][0] = -1;
ar2[line][1] = -1;
}
}
ボックスにXまたはOである「」以外の何かがある場合にわかるように、-1を入力します。このコードは私が望むことを実行していますが、ここで問題が発生します。 ar3のar2:
String[][][]ar3 = new String[80][9][9]; // array of game boards
for(int k=0;k<ar3.length;k++)// filling the array with the current game board
{
ar3[k] = ar1;
}
for(int k=0;k<ar3.length;k++)// making a move
{
int i1 = ar2[k][0];
int i2 = ar2[k][1];
if(!(i1 == -1 || i2 == -1))
if(num%2==0)
ar3[k][i1][i2] = "X";
else
ar3[k][i1][i2] = "O";
}
ボードごとに1回移動するのではなく、ar3のインデックスごとに、すべてのボードに対してすべての移動を行う理由がわかりません。たとえば(3x3ボードでデモンストレーションします)^は前のボードを意味しますこのように見えます:
^ ^ ^
^ X ^
^ ^ ^
しかし、私が作成しようとしている「移動」(たとえば0,0)の後、すべてのボードは次のようになります。
O ^ ^
^ X ^
^ ^ ^
最初の1の代わりに...そして、2番目のボード(ar3 [1])の異なるインデックスで同じことをしていますが、すべてのボードに影響します..(ar3 [0-k])したがって、最終的には私は同じ80枚のボードを手に入れました。誰かアイデアがありますか?Kインデックスのボードだけでなく、すべてのボードを変更するのはなぜですか?
ありがとう!