我有一个代表井字游戏的二维数组。空框只是 "" ;我当前的游戏板保存在 ar1 中,它是 2d 字符串数组。我想制作一个游戏板数组,它是 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";
}
我不知道为什么不是对每个棋盘进行一次移动,而是对 ar3 中的每个索引进行所有棋盘的所有移动..例如(我将在 3x3 棋盘上演示)^ 表示空棋盘之前看起来像这样:
^ ^ ^
^ X ^
^ ^ ^
但是在“移动”之后,我试图使(假设是 0,0)所有的板看起来像这样:
O ^ ^
^ X ^
^ ^ ^
而不是第一个...然后我对第二个板(ar3 [1])使用不同的索引做同样的事情,但它会影响所有板..(ar3 [0-k])所以最终我有 80 个相同的板。有人有想法吗?为什么它改变了所有的板?而不是只改变 K 指数上的板?
谢谢!