Mmmhh..
Vamos a ver si lo conseguimos.
Así a bote pronto, se me ocurre comenzar una clase Paciente lo más sencilla posible: nombre, apellidos y un int entre 1 y 3 para indicar la prioridad.
Una constante en forma de array de Strings, podría contener los nombres de las tres prioridades.
Así podemos usar el int del atributo "prioridad" para saber cuál es el nombre de prioridad que le corresponde a este Paciente.
Sobreescribimos su método toString() para tener una forma rápida de mostrar los datos en pantalla.
public class Paciente {
private String nombre;
private String apellidos;
private int prioridad;
private final String[] PRIORIDADES;
public Paciente(String nombre, String apellidos, int prioridad) {
this.nombre = nombre;
this.apellidos = apellidos;
//Nos aseguramos que la prioridad solo sea entre 1 y 3
if (prioridad >= 3)
this.prioridad = 3;
else if (prioridad <= 1)
this.prioridad = 1;
else
this.prioridad = 2;
//Nombres de las prioridades
PRIORIDADES = new String[] {"Terapia Intensiva", "Gravedad", "Atención Médica"};
}
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 String getPrioridad() {
return PRIORIDADES[prioridad - 1];
}
@Override
public String toString() {
return String.format("\t%-25s\t%s", (nombre + " " + apellidos), getPrioridad());
}
}
Bien, la intención es que luego haya una cola de pacientes y se respete el "orden de prioridad".
Pues deberíamos enseñarle a esta clase como ha de compararse con otros pacientes para determinar quien tiene prioridad o no.
Esto lo facilitamos implementando la interfaz Comparable y a través de ella le enseñaremos a la clase como se ha de comparar, que básicamente será que lo haga en función del orden natural de su atributo prioridad.
Es decir, el 1 irá delante del 2, y este delante del 3.
Apenas hay que añadir 4 líneas para esto:
public class Paciente implements Comparable<Paciente>{
private String nombre;
private String apellidos;
private int prioridad;
private final String[] PRIORIDADES;
public Paciente(String nombre, String apellidos, int prioridad) {
this.nombre = nombre;
this.apellidos = apellidos;
//Nos aseguramos que la prioridad solo sea entre 1 y 3
if (prioridad >= 3)
this.prioridad = 3;
else if (prioridad <= 1)
this.prioridad = 1;
else
this.prioridad = 2;
//Nombres de las prioridades
PRIORIDADES = new String[] {"Terapia Intensiva", "Gravedad", "Atención Médica"};
}
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 String getPrioridad() {
return PRIORIDADES[prioridad - 1];
}
@Override
public String toString() {
return String.format("\t%-25s\t%s", (nombre + " " + apellidos), getPrioridad());
}
@Override
public int compareTo(Paciente otroPaciente) {
return Integer.compare(prioridad, otroPaciente.prioridad);
}
}
Ya tenemos una clase Paciente.
Con ellos hay que formar una Cola, así que vamos a crear la clase Cola.
Podemos usar un ArrayList, tiene la ventaja de que podemos añadir todos los pacientes que queramos y gracias a que hemos implementado la interfaz Comparable, podremos mantener el ArrayList en todo momento ordenado según la prioridad.
Como digo, podremos añadir Pacientes sin limite, pero la cola de pacientes real es de solo 10 Pacientes.
Así que para mostrar el listado, lo que haremos será crear un array con los primeros 10 pacientes del ArrayList, que ya estarán ordenados.
import java.util.ArrayList;
public class Cola {
private ArrayList<Paciente> cola;
public Cola() {
cola = new ArrayList<Paciente>();
}
public void addPaciente(Paciente p) {
cola.add(p);
cola.sort(null); //Ordenamos según prioridad de pacientes
}
public Paciente[] getColaPacientes() {
/*
* La cola tendrá un límite de 10 pacientes.
* Da igual cuántos hayan almacenados en el ArrayList,
* la cola "definitiva" será solo de 10 pacientes.
* Así que construiremos un array de hasta 10 pacientes.
* Añadiremos los primeros pacientes que contiene el arraylist
* el cuál ya estará ordenado por prioridades.
*/
Paciente[] pacientes;
if (cola.size() >= 10)
pacientes = new Paciente[10];
else
pacientes = new Paciente[cola.size()];
for (int i = 0; i < pacientes.length; i++)
pacientes[i] = cola.get(i);
return pacientes;
}
}
Pues vamos a ponerlo a prueba.
Una clase con main() para testear.
Creamos un objeto Cola y con Scanner vamos pidiendo datos para crear Pacientes.
Cada Paciente creado, pedimos a la "cola" que nos de la lista de pacientes y la mostramos. Y preguntamos si se quiere seguir añadiendo más pacientes o terminar el programa.
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Cola colaPacientes = new Cola();
Scanner teclado = new Scanner(System.in);
do {
System.out.println("\n\nNuevo Paciente.");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
System.out.print("Prioridad[1-3]: ");
int prioridad = Integer.parseInt(teclado.nextLine());
//Añadimos a la cola
colaPacientes.addPaciente(new Paciente(nombre, apellidos, prioridad));
//Generamos y mostramos lista
Paciente[] lista = colaPacientes.getColaPacientes();
System.out.println("\n\t\tCOLA DE PACIENTES");
System.out.println("\t\t---- -- ---------\n");
System.out.println("\t NOMBRE\t\t\t PRIORIDAD");
System.out.println("\t ------\t\t\t ---------");
for (Paciente p: lista)
System.out.println(p);
//Preguntamos si queremos continuar
System.out.println("\n\n¿Seguir añadiendo pacientes?(s/n)");
}while(teclado.nextLine().toLowerCase().charAt(0) == 's');
teclado.close();
}
}
Si lo ejecutamos, veremos que la lista se va mostrando en todo momento, correctamente ordenada, desplazando a los de menor prioridad al fondo de la lista y dejándolos fuera cuando ya hay otros 10 pacientes de mayor prioridad que ellos.
Nuevo Paciente.
Nombre: Andres
Apellidos: Lopez
Prioridad[1-3]: 3
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Andres Lopez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Belinda
Apellidos: Sanchez
Prioridad[1-3]: 2
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Belinda Sanchez Gravedad
Andres Lopez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Sara
Apellidos: Perez
Prioridad[1-3]: 3
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Belinda Sanchez Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Javier
Apellidos: Quesada
Prioridad[1-3]: 1
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Belinda Sanchez Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Loreto
Apellidos: Lopez
Prioridad[1-3]: 1
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Belinda Sanchez Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Sergio
Apellidos: Guasch
Prioridad[1-3]: 2
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Belinda Sanchez Gravedad
Sergio Guasch Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Luis
Apellidos: Pereda
Prioridad[1-3]: 1
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Luis Pereda Terapia Intensiva
Belinda Sanchez Gravedad
Sergio Guasch Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Laura
Apellidos: Juan
Prioridad[1-3]: 1
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Luis Pereda Terapia Intensiva
Laura Juan Terapia Intensiva
Belinda Sanchez Gravedad
Sergio Guasch Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Alicia
Apellidos: Ventura
Prioridad[1-3]: 3
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Luis Pereda Terapia Intensiva
Laura Juan Terapia Intensiva
Belinda Sanchez Gravedad
Sergio Guasch Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
Alicia Ventura Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Jorge
Apellidos: Morales
Prioridad[1-3]: 2
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Luis Pereda Terapia Intensiva
Laura Juan Terapia Intensiva
Belinda Sanchez Gravedad
Sergio Guasch Gravedad
Jorge Morales Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
Alicia Ventura Atención Médica
¿Seguir añadiendo pacientes?(s/n)
s
Nuevo Paciente.
Nombre: Ana
Apellidos: Blanco
Prioridad[1-3]: 1
COLA DE PACIENTES
---- -- ---------
NOMBRE PRIORIDAD
------ ---------
Javier Quesada Terapia Intensiva
Loreto Lopez Terapia Intensiva
Luis Pereda Terapia Intensiva
Laura Juan Terapia Intensiva
Ana Blanco Terapia Intensiva
Belinda Sanchez Gravedad
Sergio Guasch Gravedad
Jorge Morales Gravedad
Andres Lopez Atención Médica
Sara Perez Atención Médica
¿Seguir añadiendo pacientes?(s/n)
n
Y con esto parece que ya tenemos al menos la parte lógica del programa.
Revísalo, pregunta lo que no entiendas y dinos si falta algo más por completar.
Un saludo.