Java - Array bidimensional en setters y getters

 
Vista:

Array bidimensional en setters y getters

Publicado por AFS (2 intervenciones) el 26/12/2020 14:14:18
Hola.

Soy novato en Java, aunque programador profesional en otros lenguajes. Estoy en un atasco. He realizado un ejercicio, el cual guarda datos en participantes[][]. Hasta ahora había hecho prácticas con variables y todo bien, pero no entiendo ni sé hacer cómo puedo asignar con valores y luego leerlos con arrays.

1
2
3
4
5
6
7
8
9
10
11
public void setDatosParticipante(int[][] datosParticipante) {
 
    ????
 
}
 
public int gettDatosParticipante() {
 
        return ????;
 
}

Y desde el main:

1
2
3
4
5
MyClase listar = new Myclase();
 
 istar.setDatosParticipante( ???? );
 
}

¿Un ejemplo claro de solución al respecto, por favor?
Muchas gracias.
AFS
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.995
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional en setters y getters

Publicado por Kabuto (782 intervenciones) el 27/12/2020 01:30:05
Hola.

Quizás lo mejor sea mostrar un ejercicio concreto.

Supongamos que quiero gestionar una lista de participantes en... yo que sé..., una competición de cualquier cosa..
La cantidad de participantes será N, es decir que puede variar cada vez que se ejecute el programa. Será un valor que decidirá el usuario al comenzar el programa.

De cada participante gestionaremos solo DOS datos: el número de participante y sus puntos.

Bien, para esto primero voy a crear una clase cuyo atributo sea una matriz de Nx2

Y le daré tres métodos:
- Uno para setear datos.
Para esto ha de recibir los dos datos: el número de participante y sus puntos.
Si en la matriz ya existe ese participante, se actualizarán sus puntos.
Si no existe, se registrará como un participante nuevo.
Si no hay espacio en la matriz porque ya no caben más participantes, pues se informa y los datos son rechazados.

- Otro para obtener la puntuación de un participante concreto.
Para esto ha de recibir el número de participante y entonces el método buscará en la matriz sus puntos y los retornará.
Si no existe nadie con ese número de participante, se retornará un valor que indique que no se han conseguido ninguna puntuación, por ejemplo, podemos devolver -1.

- Otro para mostrar la lista de participantes.
Simplemente se recorre la matriz y se muestran los datos en pantalla.
Dejamos de mostrar datos cuando la matriz termina, o cuando se encuentra un registro vacío, lo cuál indica que a partir de ahí no hay más participantes registrados.
Un registro vacío se identifica porque el elemento que corresponde al "número de participante" tiene valor 0.

Esta sería la clase. Parece que hay mucho código pero es por las líneas de comentarios_

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
public class ListaParticipantes {
 
	/*
	 * Hay N (valor se decide mediante constructor) participantes
	 * en una competición y de cada uno tenemos 2 datos:
	 * - número de participante
	 * - puntuación obtenida
	 */
	private int[][] participantes;
 
	public ListaParticipantes(int numParticipantes) {
		participantes = new int[numParticipantes][2];
	}
 
	public void setDatosParticipante(int numPart, int puntos) {
		/*
		 * Buscaremos el elemento que coincida con este número de participante
		 * y asignaremos los puntos.
		 * Si no encontramos coincidencia, es que es un registro nuevo y lo
		 * asignaremos al primer espacio que esté disponible (numero participante = 0)
		 * y setearemos los datos.
		 * Si no hay disponibles, es que la matriz está llena y se rechazarán estos datos.
		 */
 
		boolean hayCoincidencia = false;
		for (int i = 0; i < participantes.length; i++)
			if (participantes[i][0] == numPart) {//Participante encontrado
				participantes[i][1] = puntos; //Actualizamos puntos
				hayCoincidencia = true;
				System.out.println("\nDatos actualizados\n");
				break; //Finalizamos bucle
			}
 
		if (!hayCoincidencia) { //No se ha encontrado participante que coincida
			//Se trata entonces de un nuevo registro
			boolean registrado = false;
			for (int i = 0; i < participantes.length; i++)
				if (participantes[i][0] == 0) { //Registro disponible
					participantes[i][0] = numPart; //Registramos nuevo participante...
					participantes[i][1] = puntos; //... con sus puntos
					registrado = true;
					System.out.println("\nNuevo participante registrado\n");
					break; //Fin de bucle
				}
 
			if (!registrado) //No se ha registrado, porque no hay sitio disponible en la matriz
				System.out.println("\nLista participantes completa, no se admiten más registros\n");
		}
	}
 
	public int getPuntosParticipante(int numPart) {
		/*
		 * Mediante el número de participante
		 * buscamos y retornamos su puntuación
		 */
		for (int i = 0; i < participantes.length; i++)
			if (participantes[i][0] == numPart) //Participante encontrado
				return participantes[i][1]; //Retornamos sus puntos
 
		/*
		 * Si el bucle ha terminado sin retorna nada,
		 * es que no existe ese participante en la lista
		 */
		return -1; //Retornamos un valor que haga saber que no se ha encontrado el dato buscado
	}
 
	public void listarParticipantes() {
		/*
		 * Recorreremos la matriz para mostrar los elementos que contengan datos.
		 * Se dejará de mostrar cuando se encuentre el
		 * primer registro vacío (numero participante = 0)
		 */
		if (participantes[0][0] == 0)
			System.out.println("\nNo hay participantes registrados\n");
		else {
			for (int i = 0; i < participantes.length; i++) {
				if (participantes[i][0] == 0) { //Registro vacío
					System.out.println("\nFin de listado\n");
					break; //Bucle terminado
				}
				else
					System.out.printf("Nro Participante: %d -- Puntos: %d\n",
							participantes[i][0], participantes[i][1]);
			}
		}
	}
 
}


Bien, para probarla, creamos esta otra clase con método main.
En ella preguntamos por teclado cuántos participantes queremos gestionar, y con ese valor construimos una nueva lista de participantes.
Luego mostramos un menú para poder registrar datos, mostrar puntos de un participante y listar todos los participantes en pantalla.
Así podemos probar los métodos de la anterior clase:
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
public class Participantes {
 
	private static ListaParticipantes lista;
	private static Scanner teclado;
 
	public static void main(String[] args) {
 
		teclado = new Scanner(System.in);
 
		System.out.print("¿Cuántos participantes quiere gestionar?: ");
		lista = new ListaParticipantes(teclado.nextInt());
 
		int opcion = 0;
 
		do {
			System.out.println("\n(1) - Registrar puntos de un participante");
			System.out.println("(2) - Mostrar puntos de un participante");
			System.out.println("(3) - Listar datos de todos los participantes");
			System.out.println("(4) - TERMINAR PROGRAMA");
			System.out.print("Elija opcion: ");
			opcion = teclado.nextInt();
 
			switch(opcion) {
			case 1:
				registrarPuntos();
				break;
			case 2:
				mostrarPuntos();
				break;
			case 3:
				lista.listarParticipantes();
				break;
			case 4:
				System.out.println("\n\n\t\tFIN DE PROGRAMA");
				break;
			default:
				System.out.println("\nOpcion desconocida...\n");
			}
		}while(opcion != 4);
 
	}
 
	private static void registrarPuntos() {
		System.out.print("\nIndique Nro de participante: ");
		int numPart = teclado.nextInt();
		System.out.print("Puntos: ");
		int puntos = teclado.nextInt();
		lista.setDatosParticipante(numPart, puntos);
	}
 
	private static void mostrarPuntos() {
		System.out.print("\nIndique Nro de participante: ");
		int numPart = teclado.nextInt();
		int puntos = lista.getPuntosParticipante(numPart);
 
		if (puntos == -1)
			System.out.println("\nNo existe ningún participante con ese número.\n");
		else
			System.out.println("Puntos: " + puntos + "\n");
	}
 
}

Si ejecutamos este programa, podemos ver en pantalla que podemos registrar participantes nuevos, actualizar datos de los que ya existen y listarlos todos en pantalla.

Pues asegúrate de que entiendes lo que se ha hecho para acceder a la matriz, y que entiendes cada línea de código.
Pregunta cualquier cosa que no entiendas o te genere dudas.

Y después, intenta tu añadir nuevas funcionalidades a esa clase.

Por ejemplo:
- método que busque y muestre los datos del participante con la MAYOR puntuación
- método que busque y muestre los datos del participante con la MENOR puntuación
- método que sume todas las puntuaciones y muestre la media aritmética
- método que pida una puntuación por teclado y busque en la matriz los datos de los participantes que superen esa puntuación

...y cualquier cosa que se te ocurra para practicar con la matriz.


Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Array bidimensional en setters y getters

Publicado por AFS (2 intervenciones) el 27/12/2020 17:14:44
Hola.

Respuesta extensa y muy enriquecedoramente resolutiva.

Miraré de adaptarla al ejercicio mencionado en mi primer mensaje.

Muchas gracias.

Cordiales saludos.
AFS.
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