Ya hemos explicado cómo rotar una matriz con Java. En ese caso rotábamos la matriz 90 grados. Ahora vamos a rotar matriz a la izquierda con Java, es decir, de forma anti-horaria en 90º.
La idea es que las filas de la matriz pasen a ser las columnas. De tal manera que la primera fila pasa a ser la primera columna, pero de forma inversa, la segunda fila pase a ser la segunda fila de forma invertida y así hasta la última fila que pasaría a ser la última columna de forma invertida.
Pero lo mejor será verlo de forma gráfica. De esta forma podemos comprobar cómo cambian las filas por columnas.
|1 2 3| |3 6 9| |4 5 6| => |2 5 8| |7 8 9| |1 4 7|
Vamos a codificarlo. Lo primero será crear la matriz en Java.
int[][] matriz = {{1,2,3},{4,5,6},{7,8,9}};
Para ello la instanciamos directamente en un array de arrays de tipo entero. Vemos que hemos utilizado las llaves para poder introducir los números de inicialización de la matriz, en los que se puede ver que el primer array contiene a su vez otros arrays que le dan forma a la matriz.
Lo siguiente que haremos será definir una nueva matriz que contenga la matriz girada a la izquierda 90º.
int tamanio = matriz.length; int[][] nuevamatriz = new int[tamanio][tamanio];
Hemos asumido que la primera matriz es cuadrada y por ello el tamaño de la nueva matriz le damos tanto a las filas como a las columnas el tamaño de la primera matriz. El tamaño lo obtenemos mediante la propiedad .length
del Array
. Si no habría que ver el tamaño de la primera columna.
Ahora pasaremos a recorrer la matriz origen. Esto es sencillo ya que dos bucles for hasta el tamaño de la matriz nos permiten recorrer todos los elementos.
for (int x=0;x<tamanio;x++) { for (int y=0;y<tamanio;y++) { // Rotaremos la matriz a la izquierda } }
En cada iteración del bucle tendremos la posición x,y que deberemos de colocar en la nueva matriz. De tal manera que la fila pasa a ser columna. Así vemos que la variable x pasa a ser la variable y. De momento obviamos las filas.
nuevamatriz[FILA][x] = matriz[x][y];
Para las filas lo que hemos dicho es que pasaremos la columna a la fila pero en orden inverso. Es decir, para nuestra matriz de 3×3 la posición 3 pasa a ser la 1, la posición 2 se queda como está y la posición 1 pasa a ser la 3. Así la asignación del cambio quedaría así:
nuevamatriz[tamanio-1-y][x] = matriz[x][y];
Solo nos queda el meter la asignación en cada iteración del bucle:
for (int x=0;x<tamanio;x++) { for (int y=0;y<tamanio;y++) { nuevamatriz[tamanio-1-y][x] = matriz[x][y]; } }
Ya solo nos quedaría recorrer la nueva matriz para poder comprobar que hemos conseguido rotar matriz a la izquierda con Java.