/**
* Procesa una cola de manera que al llegar un elemento a la posición 0 se comprueba si puede ser
* atendido en ese momento (a través de un método aleatorio que devuelve True o False). Si puede ser
* atendido se le saca de la cola. Si no puede ser atendido en ese momento, se le pasa a la posición
* 10 de la cola,
*
*/
public class Cola { private java.util.ArrayList<String> cola = null;
private java.util.Random alea = new java.util.Random();
private boolean isDebug = true;
public Cola(){ cola = new java.util.ArrayList<String>();
this.runProccess();
}
private boolean isAccepted(){ return ((int) alea.nextInt(2)) == 0;
}
private void muestraCola(){ if(isDebug) System.out.println("-------------------------------------------"); System.out.print("["); String sep = "";
for(String c : cola){ System.out.print(sep + c);
sep = ", ";
}
System.out.print("]\n"); if(isDebug) System.out.println("-------------------------------------------"); }
private void runProccess(){ int pos = 0;
int final_size = cola.size();
while(pos < final_size){ if(isDebug) System.out.println(String.format("Atendiendo posición %d[%s]",pos, cola.get(pos))); if(this.isAccepted()){ cola.remove(pos);
if(isDebug) System.out.println("Aceptado, se le atiende y se saca de la cola"); } else { if(isDebug) System.out.println("No se puede atender en estos momentos"); if(cola.size() > 10){ for(int nJ = pos; nJ < final_size; nJ++){ if(cola.size() > (10+nJ)){ if(isDebug) System.out.println(String.format("Se mueve a %s de la posición %d a la posición %d en la que está %s", cola.get(pos),pos,(10+nJ),cola.get(10+nJ))); java.util.Collections.swap(cola, pos, 10+nJ);
}else{ cola.add(cola.get(pos));
cola.remove(pos);
break;
}
if(isDebug) System.out.println("La cola queda así:"); if(isDebug) muestraCola();
}
} else { java.util.Collections.swap(cola, pos, cola.size()-1);
if(isDebug) System.out.println("Se mueve al final"); }
}
final_size = cola.size();
if(isDebug) System.out.println("La cola queda así:"); muestraCola();
}
}
public void setAllItems(String[] items){ this.cola = new java.util.ArrayList<String>(java.util.Arrays.asList(items));
}
public void addItem(String nuevo){ this.cola.add(nuevo);
}
public java.util.ArrayList<String> getCola(){ return this.cola;
}
public static void main(String[] args){ Cola c = new Cola();
c.setAllItems(new String[] {"enero[1]","febrero[2]","marzo[3]","abril[4]","mayo[5]","junio[6]", "julio[7]","agosto[8]","septiembre[9]","octubre[10]","noviembre[11]","diciembre[12]"});
System.out.println("La cola comienza así:"); c.muestraCola();
c.runProccess();
System.out.println("La cola termina así:"); c.muestraCola();
}
}