Hola, primero necesitamos una clase Estudiante con algunos atributos, al menos los necesarios para cumplir con las gestiones que se solicitan:
public class Estudiante {
private String nombre;
private String apellidos;
private char sexo; //H hombre, M mujer
private int calificacion;
public Estudiante(String nombre, String apellidos, char sexo, int calificacion) {
this.nombre = nombre;
this.apellidos = apellidos;
this.sexo = sexo;
this.calificacion = calificacion;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public char getSexo() {
return sexo;
}
public void setSexo(char sexo) {
this.sexo = sexo;
}
public int getCalificacion() {
return calificacion;
}
public void setCalificacion(int calificacion) {
this.calificacion = calificacion;
}
@Override
public String toString() {
return String.format("Nombre: %s %s , Calificacion: %d", nombre, apellidos, calificacion);
}
}
Una clase Maestro, la cuál entre sus atributos va a tener un objeto que será una lista inmutable, cuya clase escribiremos después.
Esa lista ha de tener un tamaño determinado, así que lo indicaremos en el constructor:
public class Maestro {
private String nombre;
private String apellidos;
private ListaDelMaestro listaEstudiantes;
public Maestro(String nombre, String apellidos, int nEstudiantes) {
this.nombre = nombre;
this.apellidos = apellidos;
listaEstudiantes = new ListaDelMaestro(nEstudiantes);
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public ListaDelMaestro getListaAlumnos() {
return listaEstudiantes;
}
public void setListaAlumnos(ListaDelMaestro listaEstudiantes) {
this.listaEstudiantes = listaEstudiantes;
}
}
Y ahora la clase ListaDelMaestro.
Esta clase será un arreglo de objetos Estudiante con el tamaño indicado.
Tendrá una serie de métodos para poder hacer todo lo que se pide: agregarEstudiante, hacer una lista de aprobados, etc..
Para poder saber hasta cuál posición del arreglo hay estudiantes registrados o no, usaremos un "indice", una variable int que comienza a 0 y va incrementando su valor cada vez que se agrega un estudiante.
public class ListaDelMaestro {
private Estudiante[] lista;
private int indice; //Este indice nos dice hasta que posicion hay estudiantes en el arreglo
public ListaDelMaestro(int nEstudiantes) {
lista = new Estudiante[nEstudiantes];
indice = 0;
}
public void agregarEstudianteFinal(Estudiante estu) {
if (indice == lista.length)
System.out.println("No se pudo agregar, la lista esta completa.");
else {
lista[indice] = estu;
indice++;
System.out.println("Estudiante agregado");
}
}
public void reemplazarEstudiante(Estudiante estu, int posicion) {
if (posicion >= lista.length)
System.out.println("Posicion fuera de rango");
else if (posicion < indice) {
lista[indice] = estu;
System.out.println("Estudiante reemplazado");
}
else
System.out.println("No hay Estudiante para reemplazar en la posicion indicada");
}
public Estudiante getPrimeroLista() {
if (indice == 0) {
System.out.println("La lista esta vacía");
return null;
}
else
return lista[0];
}
public Estudiante getUltimoLista() {
if (indice == 0) {
System.out.println("La lista esta vacía");
return null;
}
else
return lista[indice-1];
}
public Estudiante[] getListaHombres() {
}
public Estudiante[] getListaMujeres() {
}
public Estudiante[] getListaAprobados() {
}
public Estudiante[] getListaReprobados() {
}
public Estudiante[] getListaApellidosEmpiezan(char letra) {
}
public Estudiante[] getListaNombresEmpiezan(char letra) {
}
}
No he escrito el código de todos los métodos, tendrás que intentar escribirlos tú para completar esta clase.
Inténtalo y si no lo consigues, comparte por aquí lo que hayas conseguido y te ayudamos a completar.
Por último, hace falta una clase principal, donde crearemos un Maestro y ofreceremos un menú de opciones para que el usuario pueda gestionar la lista.
En el menú, pedimos una opcion, la evaluamos con switch, y llamaremos a distintos métodos para hacer lo que se pide.
Te pongo un ejemplo también sin terminar, de nuevo, intenta completarlo y pídenos ayuda cuando no puedas avanzar.
Un saludo.
import java.util.Scanner;
public class Main {
private static Maestro maestro;
private static Scanner teclado = new Scanner(System.in);
public static void main(String[] args) {
//Construimos un Maestro, indicando nombre y cuantos Estudiantes tendrá su lista
maestro = new Maestro("Francisco", "Sanchez", 24);
int opcion = 0;
//Menu opciones
do {
System.out.println("\n\t\tMENU DEL MAESTRO");
System.out.println("\t\t---- --- -------\n");
System.out.println("[1] - Agregar Estudiante a la Lista");
System.out.println("[2] - Reemplazar Estudiante en una posicion");
System.out.println("[3] - Regresar primero de la Lista");
System.out.println("[4] - Regresar ultimo de la Lista");
System.out.println("[5] - Obtener Lista de Hombres");
System.out.println("[6] - Obtener Lista de Mujeres");
System.out.println("[7] - Obtener Lista de Aprobados");
System.out.println("[8] - Obtener Lista de Reprobados");
System.out.println("[9] - Obtener Lista de Apellidos que empiezan por una letra");
System.out.println("[10] - Obtener Lista de Nombres que empiezan por una letra");
System.out.println("\t\t---------");
System.out.println("[0] - TERMINAR PROGRAMA");
System.out.print("\nOpcion:");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 0:
System.out.println("\n\tFIN DE PROGRAMA");
break;
case 1:
agregarEstudiante();
break;
case 2:
reemplazarEstudiante();
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
}
}while(opcion != 0);
}
private static void agregarEstudiante() {
//Pedimos datos para construir un estudiante
System.out.println("\nNUEVO ESTUDIANTE\n");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
System.out.print("Sexo(H/M): ");
char sexo = teclado.nextLine().toUpperCase().charAt(0);
System.out.print("Calificacion(0/10): ");
int califi = Integer.parseInt(teclado.nextLine());
//Agregamos a la lista
maestro.getListaAlumnos().agregarEstudianteFinal(new Estudiante(nombre, apellidos, sexo, califi));
}
private static void reemplazarEstudiante() {
System.out.println("\nREEMPLAZAR ESTUDIANTE\n");
System.out.println("Datos del nuevo estudiante:");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
System.out.print("Sexo(H/M): ");
char sexo = teclado.nextLine().toUpperCase().charAt(0);
System.out.print("Calificacion(0/10): ");
int califi = Integer.parseInt(teclado.nextLine());
System.out.print("\nPosicion de la lista donde emplazarlo: ");
int posicion = Integer.parseInt(teclado.nextLine());
maestro.getListaAlumnos().reemplazarEstudiante(new Estudiante(nombre, apellidos, sexo, califi), posicion);
}
}