Fatto proprio alla carlona, il tuo problema può essere risolto così:
Gestisco la coda
codice:
public class EliminaCoda {
private int size;
private int next;
public EliminaCoda(){
reset();
}
public int add(){
return ++size;
}
public int next(){
return isEmpty() ? 0 : ++next;
}
public boolean isEmpty(){
return next>=size;
}
public int size(){
return size-next;
}
public void reset(){
size = 0;
next = 0;
}
}
Gestisco lo sportello per il reparto i-esimo
codice:
public class Sportello {
private String codiceReparto;
private String nomeReparto;
private EliminaCoda queue;
public Sportello(EliminaCoda queue, String codiceReparto, String nomeReparto){
this.queue = queue;
this.codiceReparto = codiceReparto;
this.nomeReparto = nomeReparto;
}
public int prendiNumero(){
return queue.add();
}
public int chiamaProssimoCliente(){
return queue.next();
}
public int clientiInCoda(){
return queue.size();
}
@Override
public String toString(){
return String.format("sportello per reparto %s - %s ",this.codiceReparto,this.nomeReparto);
}
}
Test:
codice:
public class poste {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//creo gli sportelli
Sportello sp1 = new Sportello(new EliminaCoda(),"c1","reparto1");
Sportello sp2 = new Sportello(new EliminaCoda(),"c2","reparto2");
Sportello sp3 = new Sportello(new EliminaCoda(),"c3","reparto3");
System.out.println(sp1);
System.out.println(sp2);
System.out.println(sp3);
//aggiungo clienti sportello 1
for(int i = 0; i<9;i++){
System.out.println("Entrato cliente in "+sp1+ " , posizione in coda "+sp1.prendiNumero());
}
//aggiungo clienti sportello 2
for(int i = 0; i<15;i++){
System.out.println("Entrato cliente in "+sp2+ " , posizione in coda "+sp2.prendiNumero());
}
//aggiungo clienti sportello 3
for(int i = 0; i<10;i++){
System.out.println("Entrato cliente in "+sp3+ " , posizione in coda "+sp3.prendiNumero());
}
System.out.println("Servo i clienti:");
for(int i = 0; i<16; i++){
System.out.println("Numero clienti in coda per "+sp1+" : "+sp1.clientiInCoda());
System.out.println("Numero clienti in coda per "+sp2+" : "+sp2.clientiInCoda());
System.out.println("Numero clienti in coda per "+sp3+" : "+sp3.clientiInCoda());
if(sp1.clientiInCoda()>0)
{
System.out.println("Servo cliente "+sp1+" codice "+sp1.chiamaProssimoCliente());
}
if(sp2.clientiInCoda()>0)
{
System.out.println("Servo cliente "+sp2+" codice "+sp2.chiamaProssimoCliente());
}
if(sp3.clientiInCoda()>0)
{
System.out.println("Servo cliente "+sp3+" codice "+sp3.chiamaProssimoCliente());
}
}
System.out.println("Orario di chiusura, spero di aver servito tutti i clienti");
}
}