Java - Matrices

 
Vista:
sin imagen de perfil
Val: 52
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Matrices

Publicado por Joker (19 intervenciones) el 02/11/2019 16:53:25
Hola!

Me piden un programa que haga lo siguiente:
Crear una matriz de 4 filas por 4 columnas de números enteros que inicialmente este vacía, nos piden hacer un menú con estas opciones:
- El usuario deberá rellenar TODA la matriz.
- Suma de una fila que se pedirá al usuario.
- Suma de una columna que se pedirá al usuario.
- Sumar la diagonal principal
- Sumar la diagonal inversa
- Obtener la media de todos los valores de la matriz.
Hasta que el usuario no haga lo primero no puede hacer el resto.

Necesito ayuda en la parte de suma de una fila.. y suma de una columna.. ya que no consigo sacarlo.
Gracias!

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.util.Scanner;
 
public class Diagonal {
	public static void main (String[] args) {
 
		Scanner sc = new Scanner (System.in);
		int[][] matriz = new int[4][4];
		int[] sumaFila = new int[4];
		int i, j, fila = 0, columna=0, principal=0, inversa=0, sumaMedia=0, media=0;
 
 
		System.out.println ("Introduce los valores de la matriz: ");
		for (i=0; i<4; i++)
			for (j=0; j<4; j++) {
				System.out.print (" - Fila " + (i+0) + " Columna " + (j+0) + ": ");
				matriz[i][j] = sc.nextInt();
		}
 
		System.out.println (" ");
 
		//Suma de una FILA que se pedirá al usuario
		System.out.println ("Introduce la fila que quieras sumar");
		for (i=0; i<4; i++) {
 
		}
 
		System.out.println ("El resultado de la FILA es: " + fila);
 
		System.out.println (" ");
 
		//Suma de la COLUMNA que se pide al usuario
		System.out.println ("Introduce la columna que quieras sumar");
			for (j=0; j<4; j++) {
				columna=sc.nextInt();
 
			}
			System.out.println ("El resultado de la COLUMNA es: " + columna);
 
		System.out.println (" ");
 
		//Suma de la DIAGONAL PRINCIPAL
			for (i=0; i<4; i++)
				for (j=0; j<4; j++) {
					principal = matriz[0][0] + matriz[1][1] + matriz[2][2] + matriz[3][3];
				}
			System.out.println ("El resultado de la DIAGONAL PRINCIPAL es: " + principal);
 
		System.out.println (" ");
 
		//Suma de la DIAGONAL INVERSA
			for (i=0; i<4; i++)
				for (j=0; j<4; j++) {
					inversa = matriz[3][0] + matriz[2][1] + matriz[1][2] + matriz[0][3];
				}
			System.out.println ("El resultado de la DIAGONAL INVERSA es: " + inversa);
 
		System.out.println (" ");
 
		//MEDIA de todos lo valores de la matriz
			for (i=0; i<4; i++)
				for (j=0; j<4; j++) {
					sumaMedia+= matriz[i][j];
					media = sumaMedia/16;
				}
			System.out.println ("El resultado de la MEDIA es: " + media);
	}
}
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: 2.732
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Matrices

Publicado por Kabuto (712 intervenciones) el 03/11/2019 01:03:17
Hola, como te decía en otro ejercicio, lo ideal es hacer métodos/funciones que se encarguen de tareas concretas en lugar de hacer que el main() se encargue de hacer TODO.

Además tienes algunas incongruencias que quiero señalarte para que las tengas en cuenta.

Aquí sumas 0 a los valores i y j

1
2
3
4
5
for (i=0; i<4; i++)
			for (j=0; j<4; j++) {
				System.out.print (" - Fila " + (i+0) + " Columna " + (j+0) + ": ");
				matriz[i][j] = sc.nextInt();
		}

No solo no es necesario, sino que no sirve para nada. Piénsalo, sumar 0 a un valor, implica no sumar "nada", porque 0 es "nada".

Luego, aquí usas bucles anidados pero luego dentro no usas los indices de esos bucles, sino que usas valores constantes.
1
2
3
4
5
for (i=0; i<4; i++)
				for (j=0; j<4; j++) {
					principal = matriz[0][0] + matriz[1][1] + matriz[2][2] + matriz[3][3];
				}
			System.out.println ("El resultado de la DIAGONAL PRINCIPAL es: " + principal);

Si vas a usar valores constantes, no sirve para nada usar bucles anidados. Solo te van a servir para repetir 16 veces la misma suma.
Ahora bien, lo ideal sería evitar usar valores constantes. Tú para este ejercicio sabes que la matriz es de 4x4, pero en un programa real muchas veces tu código deberá estar escrito para funcionar con una matriz de cualquier tamaño, ya que no necesariamente vas a saber de antemano el tamaño de la matriz con la que se va a trabajar

Por último, el ejercicio ha de presentar un menú, donde el usuario pueda escoger qué tarea quiere realizar, pero tu programa no lo ofrece.

Bien, te propongo un código para resolverlo.
Para ello, como dije al principio, existe una función que se encarga de cada una de las opciones posibles.
Una se encarga de sumar una FILA que se le indique, la otra lo mismo con una COLUMNA, una para cada DIAGONAL, otra para la MEDIA y otra más para mostrar un menú en pantalla.

Para facilitar que cada función pueda acceder fácilmente a la matriz, sin que tengan que recibirla como parámetro entre paréntesis, voy a declarar la matriz fuera del método main(). De este modo, la matriz será visible para todos los métodos/funciones de la clase.

El programa comienza pidiendo valores al usuario para la matriz. Una vez rellenada, muestra la matriz creada y el menú de opciones disponibles.
El usuario indica una opción tecleando un valor int y mediante un switch, se evalúa que opción ha escogido y entonces llamamos a la función que se encarga de esa tarea.

Observa detenidamente el código de cada función y pregunta lo que no entiendas.
Un saludo.

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import java.util.Scanner;
 
public class MenuMatriz {
 
	//Matriz principal. Aquí declarada, es visible para todas las funciones
	static int[][] matriz = new int[4][4];
 
	//Funciones dedicadas a tareas específicas
	static int sumaDeFila(int fila) {
		int suma = 0;
		for (int col = 0; col < matriz[fila].length; col++)
			suma += matriz[fila][col];
 
		return suma;
	}
 
	static int sumaDeColumna(int col) {
		int suma = 0;
		for (int fila = 0; fila < matriz.length; fila++)
			suma += matriz[fila][col];
 
		return suma;
	}
 
	static int sumaDiagonalPrincipal() {
		int suma = 0;
 
		for (int i = 0; i < matriz.length; i++)
			suma += matriz[i][i];
 
		return suma;
	}
 
	static int sumaDiagonalInversa() {
		int suma = 0;
 
		int fila = matriz.length-1;
		int col = 0;
		while (fila >= 0 && col < matriz[0].length) {
			suma += matriz[fila][col];
			fila--;
			col++;
		}
 
		return suma;
	}
 
	static int mediaMatriz() {
		int suma = 0;
		for (int fila = 0; fila < matriz.length; fila++)
			for (int col = 0; col < matriz[0].length; col++)
				suma += matriz[fila][col];
 
		return suma / (matriz.length * matriz[0].length);
	}
 
	static void mostrarMenu() {
		System.out.println("\nMatriz creada");
		System.out.println("------ ------");
		for (int fila = 0; fila < matriz.length; fila++) {
			for (int col = 0; col < matriz[0].length; col++)
				System.out.print(matriz[fila][col] + " ");
			System.out.println();
		}
		System.out.println("\nOPCIONES");
		System.out.println("--------");
		System.out.println("(1) Sumar FILA.");
		System.out.println("(2) Sumar COLUMNA.");
		System.out.println("(3) Sumar diagonal PRINCIPAL.");
		System.out.println("(4) Sumar diagonal INVERSA.");
		System.out.println("(5) Obtener media MATRIZ.");
		System.out.println("(9) FIN DE PROGRAMA.");
 
	}
 
	//Programa principal.
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
		//PRIMERO, llenar la matriz
		System.out.println("Introduce valores para la MATRIZ:");
		for (int fila = 0; fila < matriz.length; fila++) {
			for (int col = 0; col < matriz[0].length; col++) {
				System.out.print("\nPosición " + fila + "," + col + ": ");
				matriz[fila][col] = teclado.nextInt();
			}
		}
		//MATRIZ llena, mostramos menu y leemos opciones
		int opcion = 0;
		while (opcion != 9) {
			mostrarMenu();
			System.out.print("Elije opción: ");
			opcion = teclado.nextInt();
			switch (opcion) {
			case 1:
				System.out.print("\nIndica que FILA quieres sumar: ");
				int fila = teclado.nextInt();
				System.out.println("La suma es: " + sumaDeFila(fila));
				break;
			case 2:
				System.out.print("\nIndica que COLUMNA quieres sumar: ");
				int col = teclado.nextInt();
				System.out.println("La suma es: " + sumaDeColumna(col));
				break;
			case 3:
				System.out.println("\nSuma de diagonal PRINCIPAL es: " + sumaDiagonalPrincipal());
				break;
			case 4:
				System.out.println("\nSuma de diagonal INVERSA es: " + sumaDiagonalInversa());
				break;
			case 5:
				System.out.println("\nLa media es: " + mediaMatriz());
				break;
			case 9:
				System.out.println("\nFIN DE PROGRAMA");
				break;
			default:
				System.out.println("Opción incorrecta\n");
			}
		}
		teclado.close();
	}
 
}
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