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));
}
}