Para resolver un ejercicio de colas necesitamos de ciertas clases como son:
Entidad (Paciente, Persona, Auto, Transacción, etc) dependiendo del tipo de ejercicio.
Nodo (Nodo de Paciente)
Cola (Colección de Nodos)
Principal (Programa invocante)
Creamos un nuevo proyecto y sobre este creamos una nueva clase en este caso vamos a generar una cola de pacientes
Implementación de la clase Paciente.
package prycolas;
import java.time.LocalTime;
public class Paciente {
private String cedula;
private String nombre;
private LocalTime hora;
public Paciente(String cedula, String nombre) {
super();
this.cedula = cedula;
this.nombre = nombre;
hora=LocalTime.now();
}
public String getCedula() {
return cedula;
}
public void setCedula(String cedula) {
this.cedula = cedula;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getHora() {
return " "+hora.getHour()+":"+hora.getMinute()
+"-"+hora.getSecond();
}
public void setHora(LocalTime hora) {
this.hora = hora;
}
}
Implementación de la clase Nodo de Pacientes.
package prycolas;
public class Nodo {
private Paciente dato;
private Nodo siguiente;
public Nodo(Paciente dato, Nodo siguiente) {
super();
this.dato = dato;
this.siguiente = siguiente;
}
public Paciente getDato() {
return dato;
}
public void setDato(Paciente dato) {
this.dato = dato;
}
public Nodo getSiguiente() {
return siguiente;
}
public void setSiguiente(Nodo siguiente) {
this.siguiente = siguiente;
}
}
Implementación de la clase Cola con sus métodos para insertar, extraer, listar, verificar si está vacía
package prycolas;
public class Cola {
private Nodo inicio;
private Nodo fin;
public Cola() {
super();
inicio = fin = null;
}
public boolean esVacia() {
return inicio == fin && fin == null;
}
public void encolar(Paciente p) {
Nodo n = new Nodo(p, null);
if (esVacia()) {
inicio = fin = n;
} else {
fin.setSiguiente(n);
fin = n;
}
}
public Paciente desencolar() throws Exception {
if (esVacia()) {
throw new Exception("No hay elementos en la cola");
}
Nodo aux = inicio;
inicio = inicio.getSiguiente();
if (inicio == null) {
fin = inicio;
}
return aux.getDato();
}
public void imprimir() throws Exception {
if (esVacia()) {
throw new Exception(" Cola vacia");
}
Nodo aux = inicio;
while (aux != null) {
System.out.println(aux.getDato().getNombre()
+ " llego a las " + aux.getDato().getHora());
aux = aux.getSiguiente();
}
}
}
Invocación desde el programa principal creando un objeto cola, el cual tiene un menú de opciones
package prycolas;
import java.util.Random;
import java.util.Scanner;
public class Principal {
private static int leerEntero(String mensaje, int min, int max) {
Scanner ingreso = new Scanner(System.in);
int dato;
do {
System.out.println(mensaje + "entre " + min + " y " + max);
dato = ingreso.nextInt();
} while (dato < min || dato > max);
return dato;
}
private static String leerString(String mensaje) {
Scanner ingreso = new Scanner(System.in);
String dato;
System.out.println(mensaje);
dato = ingreso.nextLine();
return dato;
}
public static int menu() {
System.out.println("Menú Opciones");
System.out.println("1. Encolar cliente");
System.out.println("2. Atender cliente");
System.out.println("3. Imprimir cola de clientes");
System.out.println("4. Salir");
int opcion = leerEntero("Seleccione una opcion", 1, 4);
return opcion;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Cola clientes = new Cola();
int op;
do {
op = menu();
switch (op) {
case 1:
String cedula=leerString("Ingrese la cédula: ");
String nombre=leerString("Ingrese el nombre: ");
clientes.encolar(new Paciente(cedula,nombre));
break;
case 2:
try {
Random aleatorio = new Random();
Paciente sale = clientes.desencolar();
System.out.println("Atendiendo a "+sale.getNombre()+" espere ...");
int tiempo_atencion=1000+aleatorio.nextInt(10000);
Thread.sleep(tiempo_atencion);
System.out.println(sale.getNombre()+ " fue atendido en "+tiempo_atencion/1000+"seg");
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 3:
System.out.println("Pacientes en cola ");
try {
clientes.imprimir();
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 4:
break;
}
} while (op != 4);
}
}