Java - Invertir arreglos bidimensionales

 
Vista:

Invertir arreglos bidimensionales

Publicado por Franco (1 intervención) el 28/07/2019 02:42:31
Estoy realizando este ejercicio donde en un arreglo bidimensional lo lleno con números aleatorios pero esos mismos números los debo poner otro arreglo pero al revés . Es decir si en la posición (0,0) tengo un 5 ese 5 debe ir en el otro arreglo en la posición (3,3) . Eso último es lo que no puedo ya que solo me genera las 2 tablas con los mismo números . Alguien y sugiere una solución.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
public class invertido{
	public static void main(String[] args){
		int i=0;
		int p=0;
		int a[][]=new int [4][4];
		int s[][]=new int[4][4];
 
		for(i=0;i<a.length;i++){
 
			for(p=0;p<a.length;p++){
				a[i][p]=(int)(Math.random()*10+1);
                System.out.print(a[i][p] +"\t");
 
			}
			System.out.println();
		}
 
        System.out.println();
 
 
        for(int d=0;d<a.length;d++){
            int x=s.length-1;
            for(int e=0;e<a.length;e++){
                int y=s.length-1;
                s[x][y]=a[d][e];
 
            System.out.print(s[x][y] +"\t");
 
            }
            System.out.println();
        }
 
	}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Invertir arreglos bidimensionales

Publicado por Kabuto (1381 intervenciones) el 28/07/2019 13:12:29
Hola.
Estás cometiendo dos errores.

El primer error es que las variables x e y no están adoptando valores correctos.
Fíjate que siempre tienen el mismo valor --> s.length-1

Igual que las variables d y e comienzan en 0 y van incrementando hasta llegar a s.length-1 ....
...las variables x e y han de comenzar en s.length-1 y decrementar hasta llegar a 0

Para conseguir esto, lo mejor es declararlas fuera de los bucles anidados. Dentro de ellos, iremos decrementándolas. En el caso de la y, cuando el bucle interno termine, se reiniciará a s.length-1 para de nuevo repetir el proceso de decrementación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public static void main(String[] args) {
		int i=0;
		int p=0;
		int a[][]=new int [4][4];
		int s[][]=new int[4][4];
 
		for(i=0;i<a.length;i++){
 
			for(p=0;p<a.length;p++){
				a[i][p]=(int)(Math.random()*10+1);
				System.out.print(a[i][p] +"\t");
 
			}
			System.out.println();
		}
 
		System.out.println();
 
 
		int x=s.length-1;
		int y=s.length-1;
 
		for(int d=0;d<a.length;d++){
			for(int e=0;e<a.length;e++){
 
				s[x][y]=a[d][e];
 
				System.out.print(s[x][y] +"\t");
				y--; //Decrementamos y
 
			}
			y = s.length-1; //Reiniciamos y
			x--; //Decrementamos x
			System.out.println();
		}
 
	}

Bien, si ejecutas esto, ahora la matriz sí se esta invirtiendo. Sin embargo, en pantalla sigue mostrándose igual que antes, parece que el orden no ha cambiado.

Esto nos lleva a tu segundo error.
El problema es que estás mostrando en pantalla los valores de la matriz al mismo tiempo que inviertes las posiciones. Entonces, da igual lo cambios que hagas, en pantalla se va a mostrar en el orden según el momento que haces el system.out.print(). No se está reflejando el orden que ocupa realmente en la matriz.

La matriz has de mostrarla cuando los bucles de inversión hayan terminado, de lo contrario, no se apreciará el orden real que ocupan en la matriz.

Si volvemos a mostrar la matriz cuando ya ha terminado el proceso de inversión, verás que ahora si se muestra correctamente.
Pruébalo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public static void main(String[] args) {
		int i=0;
		int p=0;
		int a[][]=new int [4][4];
		int s[][]=new int[4][4];
 
		for(i=0;i<a.length;i++){
 
			for(p=0;p<a.length;p++){
				a[i][p]=(int)(Math.random()*10+1);
				System.out.print(a[i][p] +"\t");
 
			}
			System.out.println();
		}
 
		System.out.println();
 
 
		int x=s.length-1;
		int y=s.length-1;
 
		System.out.println("A continuación se muestra la matriz al mismo tiempo que la invertimos.");
		System.out.println("Debido a eso, va a parecer que no se ha invertido nada.");
		System.out.println();
 
		for(int d=0;d<a.length;d++){
			for(int e=0;e<a.length;e++){
 
				s[x][y]=a[d][e];
 
				System.out.print(s[x][y] +"\t");
				y--; //Decrementamos y
 
			}
			y = s.length-1; //Reiniciamos y
			x--; //Decrementamos x
			System.out.println();
		}
 
		System.out.println();
		System.out.println("Ahora la volvemos a mostrar, tras haber finalizado la inversión.");
		System.out.println("Esta vez, sí se apreciarán los cambios.");
		System.out.println();
 
		for (x = 0; x < s.length; x++) {
			for (y = 0; y < s[0].length; y++)
				System.out.print(s[x][y] + "\t");
 
			System.out.println();
		}
 
	}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar