Java - Crear una clase de alumnos

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

Crear una clase de alumnos

Publicado por Franco (4 intervenciones) el 28/01/2019 21:55:34
Buenas tardes , soy nuevo en el mundo de la programación.

Necesito el codigo :

Permitir el registro de 10 alumnos por teclado(Scanner) a una clase con su respectivo nombre, edad y carrera a
la que ingresa:
 Obtener el promedio de edad de los asistentes a la clase.
 Agrupar a los alumnos en grupos de 3 de acuerdo al tipo de carrera, ciencias o letras.
Por ejemplo:
Luis 20 años Ingeniería Industrial; Mario 18 Comunicaciones; María 18 Literatura.
En un grupo estarían
Mario 18 Comunicaciones y María 18 Literatura.

Espero me puedan ayudar.

Gracias y saludos
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

Crear una clase de alumnos

Publicado por Kabuto (1381 intervenciones) el 29/01/2019 00:30:44
Si te han propuesto este ejercicio, es porque se supone que ya tienes los conocimientos para hacerlo, o al menos para intentarlo.

Propón tú un código inicial, aunque no funcione, del que podamos partir. No esperes a que otros te lo hagan. Más que nada, porque entonces no aprenderás nada.
La única forma de aprender es comenzar a hacerlo, encontrarte con un problema concreto que no sabes resolver, y preguntar por ese problema concreto.

Intenta al menos conseguir pedir 10 datos de alumnos y calcular el promedio de edad. Esto debería ser fácil.

Lo de agrupar los alumnos en grupos de tres según el tipo de carrera, si puede tener alguna que otra complicación. Sobre todo es importante aclarar una cosa: ¿Puedes usar arreglos/arrays?
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

Crear una clase de alumnos

Publicado por Franco (4 intervenciones) el 29/01/2019 05:23:48
Es que lo único que me falta es eso, lo e echo con un arraylist, pero al momento de listar grupos e pensado crear otro array pero no se como meter uno dentro del otro
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
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

Crear una clase de alumnos

Publicado por Kabuto (1381 intervenciones) el 29/01/2019 13:13:01
Esto se resuelve mejor si pudieramos crear nuestra propia clase GrupoAlumnos donde codificar como se agrupan los alumnos, sus própios métodos, etc..

Pero supongo que no podemos y tenemos que apañarnoslas con herramientas más básicas.

Lo que hay que tener presente desde el principio es que solo habrán 4 grupos posibles.
Son 10 alumnos, repartidos en grupos de 3 alumnos, significa que tendremos tres grupos de tres alumnos (9 alumnos) y un cuarto grupo que solo contendrá un alumno.

Así que podemos declarar 4 ArrayList de tipo String, uno por cada grupo.

Pero, hay dos tipos de grupos según la Carrera del Alumno: Ciencias y Letras.

¿Cómo adjudicamos y controlamos a que tipo de carrera se asigna cada grupo/ArrayList?

Podemos hacer que el primer elemento del ArrayList sea un String con el tipo de carrera (Ciencias o Letras)
Los siguientes elementos serán Strings con los datos de cada alumno.
Tenemos tres datos: nombre, edad y carrera. Aunque los pediremos por separado, luego al guardarlos en el ArrayList se puede juntar todo en un único String.

Dejo por aquí un código que puede solucionar todo esto.
Hay muchas lineas pero en realidad la mayoría son comentarios.
La parte que es un poco más complicada es cuando hay que revisar los grupos buscando donde debemos guardar los datos que nos acaban de dar.
Organizar este proceso para que no sea demasiado complejo y engorroso es la clave, creo que más o menos lo he conseguido.

Básicamente, lo que hago cuando ya tengo los datos de un alumno es:

- Miro si el primer grupo esta vacío.
- Si está vacío, lo inicio con el nuevo alumno y este grupo queda asignado al tipo de carrera de este alumno.

- Si no está vacío, entonces pregunto si aún NO está completo (un grupo esta completo cuando su size() es 4) y si el grupo pertenece al tipo de carrera que necesito (el elemento 0 del ArrayList nos dice el tipo de carrera al que esta asignado).
- En caso afirmativo, añado este alumno.
- En caso negativo, es decir, el grupo ya esta completo o no lo está, pero no pertenece al tipo de carrera que necesito, paso al siguiente grupo y hago las mismas preguntas.

- De este modo, todos los alumnos quedan correctamente agrupados.

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import java.util.ArrayList;
import java.util.Scanner;
 
public class Agrupar {
 
	//Objetos y variables de uso global
 
	static Scanner teclado = new Scanner(System.in);
 
	/* Son 10 alumnos, en grupos de 3, por lo tanto como máximo
	 * tendremos 4 grupos: 3 grupos de 3 alumnos (9 alumnos)
	 * y otro grupo de 1 solo alumno
	 * 
	 * Dichos grupos podemos representarlos mediante 4 ArrayList de tipo String.
	 * Cada ArrayList tendrá solo 4 elementos como máximo.
	 * El primer elemento será un String que nos dirá a que carrera pertenece
	 * este grupo (Ciencias o Letras)
	 * Los restantes 3 elementos serán Strings con los datos de cada alumno
	 */
	static ArrayList<String> grupo1 = new ArrayList<String>();
	static ArrayList<String> grupo2 = new ArrayList<String>();
	static ArrayList<String> grupo3 = new ArrayList<String>();
	static ArrayList<String> grupo4 = new ArrayList<String>();
 
	/*
	 * Para determinar a que tipo de carrera (Ciencias o Letras) pertenece cada alumno, podemos usar
	 * un listado de carreras agrupadas según su tipo
	 */
	final static String CARRERAS_CIENCIAS = "ingenieria industrial astronomia biologia bioquimica biotecnologia fisica genetica geologia matematicas";
	final static String CARRERAS_LETRAS = "periodismo historia publicidad humanidades filologia traduccion comunicaciones literatura";
 
	//Acumulador para el promedio de edades
	static int sumaEdades = 0;
 
	public static void main(String[] args) {
 
		for (int i = 1; i <= 10; i++)
		{
			//Pedimos datos alumno
			System.out.println("Alumno #" + i);
			System.out.print("Nombre: ");
			String nombre = teclado.nextLine();
			System.out.print("Edad: ");
			String edad = teclado.nextLine();
			System.out.print("Carrera: ");
			String carrera = teclado.nextLine();
 
			//Determinamos tipo de carrera, si la carrera no es reconocida no se registrará este alumno
			String tipoCarrera;
			if (CARRERAS_CIENCIAS.contains(carrera.toLowerCase()))
				tipoCarrera = "Ciencias";
			else if (CARRERAS_LETRAS.contains(carrera.toLowerCase()))
				tipoCarrera = "Letras";
			else
			{
				System.out.println("\nNO se reconoce la carrera: " + carrera);
				System.out.println("Registro de alumno cancelado");
				i--; //Revertimos el contador del bucle para que este alumno no sea contabilizado
				continue; //Damos esta iteracion por finalizada y pasamos a la siguiente
			}
 
			/*
			 * Ya tenemos el tipo de carrera, ahora hay que agrupar al alumno.
			 * Iremos grupo por grupo haciendo las preguntas necesarias para saber
			 * si el grupo esta vacio, si está lleno o si está empezado a ver si nos 
			 * sirve para nuestro tipo de carrera actual
			 */
			//Los 3 datos del alumno los agrupamos en un único String, que será el 
			//que guardaremos en el ArrayList
			String datosAlumno = nombre + " " + edad + " " + carrera;
 
			if (grupo1.isEmpty()) //Primer grupo esta vacío, lo iniciamos
			{
				grupo1.add(tipoCarrera); //Asignamos tipo de carrera a este nuevo grupo
				grupo1.add(datosAlumno);
			}
			//Si no está vacio, preguntamos si NO está completo y si pertenece al tipo de carrera que buscamos
			else if(grupo1.size() < 4 && grupo1.get(0).equals(tipoCarrera))
				grupo1.add(datosAlumno);
			//Si este grupo está completo o bien no pertenece al tipo carrera buscado, pasamos al siguiente grupo
			else  if (grupo2.isEmpty())
			{
				grupo2.add(tipoCarrera);
				grupo2.add(datosAlumno);
			}
			else if(grupo2.size() < 4 && grupo2.get(0).equals(tipoCarrera))
				grupo2.add(datosAlumno);
			else  if (grupo3.isEmpty())
			{
				grupo3.add(tipoCarrera);
				grupo3.add(datosAlumno);
			}
			else if(grupo3.size() < 4 && grupo3.get(0).equals(tipoCarrera))
				grupo3.add(datosAlumno);
			else  if (grupo4.isEmpty())
			{
				grupo4.add(tipoCarrera);
				grupo4.add(datosAlumno);
			}
			else if(grupo4.size() < 4 && grupo4.get(0).equals(tipoCarrera))
				grupo4.add(datosAlumno);
 
			//Alumno ya está agrupado, ahora acumulamos la edad para luego sacar la media
			sumaEdades += Integer.parseInt(edad);
		}
 
		/*
		 * El bucle para pedir datos y agrupar los 10 alumnos ha finalizado
		 * Ahora mostramos los datos obtenidos.
		 * Usamos un metodo para no repetir código innecesariamente
		 */
		System.out.println("\n\n\tDATOS OBTENIDOS");
		System.out.println("Primer grupo");
		mostrarGrupo(grupo1);
		System.out.println("\nSegundo grupo");
		mostrarGrupo(grupo2);
		System.out.println("\nTercer grupo");
		mostrarGrupo(grupo3);
		System.out.println("\nCuarto grupo");
		mostrarGrupo(grupo4);
 
		//Por ultimo, la media de edad
		System.out.println("\n\nEl promedio de edad entre los alumnos es: " + (int)(sumaEdades / 10));
 
		System.out.println("\n\n\tFIN DE PROGRAMA");
	}
 
	/**
	 * Recibe un grupo de alumnos y muestra los datos en pantalla.
	 * @param grupo ArrayList con los datos del grupo.
	 */
	static void mostrarGrupo(ArrayList<String> grupo) {
 
		System.out.println("Tipo de Carrera: " + grupo.get(0));
		System.out.println("Componentes:");
		for (int i = 1; i < grupo.size(); i++)
			System.out.println(grupo.get(i));
	}
 
}
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

Crear una clase de alumnos

Publicado por franco (4 intervenciones) el 29/01/2019 16:16:15
Gracias , me gustaria si me pudieras dar algunos tips para mejorar rapidamente
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

Crear una clase de alumnos

Publicado por franco (4 intervenciones) el 29/01/2019 16:22:01
final static String CARRERAS_CIENCIAS = "ingenieria industrial astronomia biologia bioquimica biotecnologia fisica genetica geologia matematicas";
final static String CARRERAS_LETRAS = "periodismo historia publicidad humanidades filologia traduccion comunicaciones literatura";

esta parte es curiosa , ni se me habia pasado por la mente, mejor dicho no conocia o sabia que se podia hacer eso

if (CARRERAS_CIENCIAS.contains(carrera.toLowerCase()))
tipoCarrera = "Ciencias";
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
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

Crear una clase de alumnos

Publicado por Kabuto (1381 intervenciones) el 29/01/2019 20:48:14
Es una forma de hacerlo.

También se podría haber declarado dos arrays con los nombres de las carreras, y recorrer los arrays con bucles buscando coincidencias.
Pero requeriría algo más de código.

Así que aprovechando el metodo contains() de la clase String, conseguimos hacerlo de forma rápida y simple.
Aunque hay que tener en cuenta que haciéndolo así, se pueden cometer ciertas inexactitudes.

Por ejemplo, supón que alguien teclea como carrera la palabra "mani".

"mani" no es una carrera, no es nada... debería ser rechazada...pero el programa la dará por buena y la considerará como una carrera de Letras porque SÍ está contenida en el String de Carreras de Letras:

1
CARRERAS_LETRAS = "periodismo historia publicidad humanidades filologia traduccion comunicaciones literatura";

Así que aunque es un sistema más o menos ingenioso, es bastante imperfecto.
Hacerlo así nos puede servir para este caso, puesto que se trata de un ejercicio de práctica y nos permite dar una solución fácil y rápida para poder centrarnos en lo importante de este ejercicio, que es encontrar una forma eficaz de organizar los alumnos en grupos.

Pero no serviría obviamente para un programa profesional. Aunque en un programa profesional, de todos modos no se le pediría al usuario que teclee nada por consola, se le mostraría un menu desplegable con todas las carreras aceptables para que elija una con un click de ratón.
No habría posibilidad alguna de que el usuario teclease ninguna burrada.

Ahora que el ejercicio está terminado, y que ha quedado resuelto lo de agrupar alumnos, se puede intentar mejorar este aspecto y usar arrays con nombres de carreras con los que comparar la carrera tecleada, lo cuál como dije antes requiere algo más de código, pero se evitan las inexactitudes que puede provocar usar el método contains().
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