Não estou conseguindo utilizar Filas com prioridade PriorityQueue

0 respostas
java
V

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

<a class="mention" href="/u/override">@Override</a>

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<>(

/<em>new Comparator() {

<a class="mention" href="/u/override">@Override</a>

public int compare(Paciente p1, Paciente p2) {

return Integer.valueOf(p1.getCodigo()).compareTo(p2.getCodigo());

}

}</em>/

);

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 :	

<a href="//queue.add">//queue.add</a>(new Paciente(“Marcel”, VERMELHO, “Dor ebdominal”));

O codigo enfileira corretamente
Criado 3 de abril de 2020
Respostas 0
Participantes 1