Devo realizzare entro Martedì una FIFO che trovo particolarmente incasinata con un array..
per chi non sapesse come funziona, faccio un breve esempio (FIFO -> First In First Out, il primo che viene inserito è il primo ad essere estratto, come nella coda del supermercato)
Front e Back tengono traccia del punto di inizio e del punto finale della coda.

Inserisco il primo elemento (gli elementi vuoti sono null):

front=0 back=0
--------------------
| a | null | null |
--------------------

Ne inserisco un altro:

front=0 back=1
------------
| a | b | |
------------

tolgo il primo:

front=1 back=1
------------
| | b | |
------------

Ne metto due, siccome è una FIFO circolare il primo dei due elementi immessi verrà messo all'inizio e il secondo nel primo posto vuoto.

front=1 (punta a b) back=2 (punta a d)
------------
| c | b | d |
------------

Trovo la cosa molto complicata da gestire, ho provato a realizzare il programma ma ho parecchi problemi nell'estrazione di un elemento...
so che è un programma impegnativo, ma qualcuno avrebbe voglia di darci un'occhiata?

codice:
public class FIFO
{
	private String array[];
	private int front, back, num; //num tiene conto del numero di elementi presenti nella cosa
	public int max;    //lunghezza massima dell'array

	public FIFO(){
		max=0;
		front=0;
		back=0;
		num=0;
	}

	public FIFO(int maxElementi){
		array=new String[maxElementi];  //creo un array con grandezza data in input
		max=maxElementi;
	}

	public boolean insert(String s)
	{
		if((front==0)&&(back==0)&&(num!=0)) //se la coda è piena
			return false;

		if (back==max-1){ //se back è alla fine della coda
			array[back]=s;
			back=0;
		}

		if((array[back]==null)||(array[back]=="")){  //se si è su una cella vuota
                                                                //si può scrivere 
			array[back]=s;
			back++;
			num++;
		}

			num++;
			return true;
	}

	public String toString(){      //stampa la successione di elementi
	        String stringa="";

		if(num==0)
			System.out.println("La CODA e' vuota!");
		else
			if(front<back)
				for(int i=front;i<=back;i++)  
					stringa=stringa+array[i];
			else
			{

				for(int i=front;i<max;i++)
					stringa=stringa+array[i];
				for(int i=0;i<back;i++)
					stringa=stringa+array[i];
			}

         	return stringa;
	}


	public String extract()  //restituisce un elemento, cancellandolo dalla coda
	{
	
	if(num!=0){         //se ci sono elementi nella coda

		String estr= array[front];     
		if (front == max-1)   //se front è alla fine
		{
			array[front]="";        
			front=0;
		}
		else
			front++;
		num--;

			return estr;
         }
		return null;
	}

}
Chiunque avesse altri dubbi (e immagino ne avrà :P) chieda pure! Pubblicherò la classe che usa questa, la sto rifacendo perché avevo fatto qualche pasticcio
Grazie