Algo va mal con la matriz 3d

Tengo una matriz 2D que representa un tablero de tres en raya. Y la caja vacía es solo ""; Mi tablero de juego actual está guardado en ar1, que es una matriz de cadenas 2d. Quiero hacer una matriz de tableros de juego que es matriz de matriz 2d = matriz 3d. Entonces supongo que sería así:

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;
        }

Sí, quiero 80 tableros y el juego sería 9x9. Hasta ahora todo está bien ... pero ahora me gustaría mirar en el tablero de juego (ar1) y hacer todos los movimientos posibles en el ar3. Entonces, por cada movimiento posible, tengo un tablero en ar3. Para eso, crearía una matriz que contendría los índices vacíos en el tablero que es cada movimiento posible en 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;
                }

            }

Como puede ver en caso de que el cuadro tenga algo más que "" que es X u O, entonces pongo -1. Este código está haciendo lo que quiero, pero aquí viene el problema. Intentaré generar todos los movimientos posibles que están almacenados en ar2 en ar3:

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";
        }

No tengo idea de por qué en lugar de hacer un solo movimiento para cada tablero, para cada índice en ar3 está haciendo todos los movimientos para todos los tableros ... por ejemplo (demostraré en un tablero de 3x3) ^ significa vacío El tablero antes Se ve como esto:

^ ^ ^
^ X ^
^ ^ ^

pero después del "movimiento" estoy tratando de hacer (digamos 0,0) todos los tableros se ven así:

O ^ ^
^ X ^
^ ^ ^

En lugar de solo el primer 1 ... y luego estoy haciendo lo mismo con diferentes índices para el segundo tablero (ar3 [1]) pero afecta a todos los tableros ... (ar3 [0-k]) así que eventualmente Tengo 80 tableros que son lo mismo. ¿Alguien tiene una idea? ¿Por qué cambia todos los tableros, en cambio solo el del índice K?

¡Gracias!

Respuesta 1

Tengo dificultades para decidir cómo nombrar una variable de Archivo y una variable de Cadena, que describen el mismo directorio. Básicamente tengo una cadena que describe la ubicación de un directorio ...

Posible duplicado: Ejemplo del programa JMenubar en JInternalFrame cuando maximizo el JInternalFrame estoy trabajando en una aplicación Swing, y soy nuevo con los diseños, quiero mi JFrame y el ...

¿Por qué afirmar en Java una palabra clave y no un método? La afirmación del método podría verse así: aserción pública de vacío estático (condición booleana) {if (! Condition) {throw new AssertionError (); ...

En el libro "Java 8 en acción" (de Urma, Fusco y Mycroft) destacan que las secuencias paralelas utilizan internamente el conjunto de unión de la bifurcación común y que si bien esto puede configurarse globalmente, por ejemplo, utilizando ...