Olá pessoal, esta acontecendo uma anomalia no meu código.
Quando estou fazendo um exercicio que necessita utilizar “Queues” com comportamento “fifo” ai preciso utilizar “PriorityQueue” certo ?
Mas quando mando ela enfileirar ela enfileira errado. mesmo eu fazendo a implementação do “Compareble” na Classe e tbm tentei com Classe anonimas com “Comparator”.
O exercício é criar um sistema de atendimento de uma UBS/UPA onde simplesmente é necessário enfileirar com 3 prioridades endo ela Verde = 2, amarelo = 1 e vermelho = 0. E desenfileirar atendendo “Atendendo primeiro” os vermelho em seguida amarelos e depois verdes. Segue meu código:
--------------------------Classe Paciente -------------------------------------------
public class Paciente implements Comparable{
private String nome;
private int codigo;
private String queixa;
public Paciente(String nome, int codigo, String queixa) {
super();
this.nome = nome;
this.codigo = codigo;
this.queixa = queixa;
}
// aqui ficam todos os gets e sets
@Override
public int compareTo(Paciente o) {
if(codigo > o.codigo) {
return 1;
}else if(codigo < o.codigo) {
return -1;
}
return 0;
}
--------------------------Classe Testes com Main -------------------------------------------
public class Teste {
static SecureRandom sr = new SecureRandom();
static Queue queue = new PriorityQueue<>(
/new Comparator() {
@Override
public int compare(Paciente p1, Paciente p2) {
return Integer.valueOf(p1.getCodigo()).compareTo(p2.getCodigo());
}
}/
);
static final int MAX = 10;
static final int VERDE = 2;
static final int AMARELO = 1;
static final int VERMELHO = 0;
public static void main(String[] args) {
queue.add(new Paciente("Pamela", VERDE, "Sintomas de Gripe"));
queue.add(new Paciente("Camila", VERDE, "Sintomas de Gripe"));
queue.add(new Paciente("Caio", VERDE, "Sintomas de Gripe"));
queue.add(new Paciente("Marcel", VERMELHO, "Dor ebdominal"));
queue.add(new Paciente("Timotio", AMARELO, "Queda"));
queue.add(new Paciente("Pati", AMARELO, "Dores fortes na cabeça"));
queue.add(new Paciente("Marcel", VERMELHO, "Dor ebdominal"));
//geraPaciente(5);
System.out.println(queue);
}
public static Queue<Paciente> geraPaciente(int quant) {
if(quant <= 0) {
return queue;
}
int randol = (int)(sr.nextDouble()*MAX);
getPaciente(randol);
return geraPaciente(quant -=1);
}
private static void getPaciente(int key) {
Paciente paciente = null;
switch (key) {
case 1:
queue.add(new Paciente("Marcel", VERMELHO, "Dor ebdominal"));
break;
case 2:
queue.add(new Paciente("Raquel", VERMELHO, "Fratura exposta"));
break;
case 3:
queue.add(new Paciente("Marcos", AMARELO, "Atropelamento"));
break;
case 4:
queue.add(new Paciente("Paulo", AMARELO, "Dor nas pernas"));
break;
case 5:
queue.add(new Paciente("Felipe", VERDE, "Dor de cabeça"));
break;
case 6:
queue.add(new Paciente("Mateus", VERDE, "Dor de cabeça"));
break;
case 7:
queue.add(new Paciente("bruno", AMARELO, "queda de bicicleta"));
break;
case 8:
queue.add(new Paciente("carol", VERDE, "Bronquite atacada"));
break;
case 9:
queue.add(new Paciente("caio", VERDE, "Sinusite atacada"));
break;
default:
paciente = new Paciente("maria", VERDE, "Sintomas de Gripe");
break;
}
}
}
------------------------------------Comentarios finais -----------------------------------------
quando eu habilito o metodo geraPaciente ele não gera na ordem.
e se eu comentar :
//queue.add(new Paciente(“Marcel”, VERMELHO, “Dor ebdominal”));
O codigo enfileira corretamente