Salve a tutti, sto implementando una classe Impiegato dove ad un certo punto si chiede di inserire due date e di stampare gli impiegati che sono stati assunti nelle range di queste due date. Come posso fare? Io ho provato con Gregorian Calendar (l'ho "studiato" oggi per la prima volta e non so se l'ho usato bene)..ci sono altri metodi? Perchè in questo modo riscontro degli errori. Ho provato ad inserire le date 12/10/2011 e 08/05/2011, ma mi da un problema di outOfBonds..oppure con altre date a volte stampava, ma non quelli giusti..

Vi inserisco la mia classe e il tester:

codice:
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;


public class Impiegato {
	
	static Scanner in = new Scanner(System.in);
	
	
	//costruttore
	public Impiegato (String cog, String sess, String dat)
	{
		cognome=cog;
		sesso=sess;
		data=dat;
	}
	//GET E SET DEI CAMPI DI ESEMPLARE
	public String getSur()
	{
		return cognome;
	}
	public void setSur(String v)
	{
		cognome=v;
	}
	public String getSex()
	{
		return sesso;
	}
	public void setSex(String v)
	{
		sesso=v;
	}
	public String getData()
	{
		return data;
	}
	public void setData(String v)
	{
		data=v;
	}
	
	//STAMPA 
	public static void stampa(Impiegato[]v)
	{
		for(int i=0;i<v.length;i++)
		{
			System.out.println(v[i].cognome+", "
		+v[i].sesso+", "+v[i].data);
		}
	}
	//ORDINAMENTO PER COGNOME
	//(INSERTION SORT)
	public static void OrdSur(Impiegato[]v)
	{
		Impiegato temp;
		for (int i=1;i<v.length;i++)
		{
			for(int j=i;j>0;j--)
			{
				if((v[j].cognome).compareToIgnoreCase(v[j-1].cognome)<0)
				{
					temp=v[j];
					v[j]=v[j-1];
					v[j-1]=temp;
				}
			}
		}
	}
	
	//Stampare tutti gli impiegati assunti tra 2 date 
	//inseriti in input e fare in modo di dare all'utente 
	//la possibilità di decidere se continuare 
	//a stampare o no.
	public static void stampaPerDate(String dt1, String dt2,Impiegato[] v)
	{
		//ARRAY CHE CONTERRà OGGETTI GREGORIAN
		GregorianCalendar[] array= new 
				GregorianCalendar[v.length];
		Date[] array2= new Date[v.length];
		//trasformo in gregorian dt1 e dt2
		GregorianCalendar first= Impiegato.GrCal(dt1);
		GregorianCalendar second= Impiegato.GrCal(dt2);
		for(int i=0;i<v.length;i++)
		{
			//uso un metodo prinvato che mi trasforma
			//la stringa DATA in una vera data
			//trasformo tutte le date dell'array in gregorian
			array[i]= Impiegato.GrCal(v[i].data);
			array2[i]=array[i].getTime();
		}	
			//confronto
		Date data1 = first.getTime();
		Date data2 = second.getTime();
			for(int j=0;j<v.length;j++)
			{
				if(array2[j].after(data1) || array2[j].before(data2))
				{
					//stampa non solo la data
					//ma l'oggetto Impiegato 
					System.out.println(v[j].cognome+", "
							+v[j].sesso+", "+v[j].data);
				}
				else if(array2[j].equals(data1)||array2[j].equals(data2))
				{
					System.out.println(v[j].cognome+", "
							+v[j].sesso+", "+v[j].data);
				}
				System.out.println("Inserisci:"
						+"\n 1 se vuoi continuare la stampa"
						+"\n 2 se vuoi interrompere la stampa");
				int scelta = in.nextInt();
				if(scelta==2){break;}
				if(scelta==1);
		
		}	
		
		
	}
	
	//GREGORIAN CALENDAR
	private static GregorianCalendar GrCal(String data)
	{
		//String data = "05/12/1992"
		int giorno = Integer.parseInt(data.substring(0,1));
		int mese = Integer.parseInt(data.substring(3,4));
		int anno = Integer.parseInt(data.substring(6,9));
		GregorianCalendar calendario = new GregorianCalendar(anno,mese,giorno);
		return calendario;
	}
	//inizializzare l'array con dati standard
	public static Impiegato[] datiCollaudo()
	{
		Impiegato[] lista = new Impiegato[5];
		lista[0]= new Impiegato("Roberti", "M", "12/04/2012");
		lista[1]= new Impiegato("Palmisano", "M", "07/05/2011");
		lista[2]= new Impiegato("Corretti", "F", "03/04/2012");
		lista[3]= new Impiegato("Fiore", "F", "22/09/2012");
		lista[4]= new Impiegato("Ansi", "M", "12/10/2011");
		
		return(lista);
	}
	
	
	
	
	
	
//campi esemplare
	private String cognome;
	private String sesso;
	private String data;

}

tester:

codice:
import java.util.Scanner;


public class Impiegato_tester {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int scelta;
		Impiegato[] dipendenti = null;
		Scanner in = new Scanner(System.in);
		
		do
		{
			System.out.println("Scegli tra le seguenti azioni: "
					+"\n1.Inserisci dati da input"
					+"\n2.Usa dati di collaudo"
					+"\n3.Ordina in base al cognome"
					+"\n4.Stampa impiegati assunti tra due date"
					+"\n5.Termina programma");
			scelta = in.nextInt();
			
			switch(scelta)
			{
			case 1:
				System.out.println("QUANTI IMPIEGATI VUOI INSERIRE?");
				int num = in.nextInt();
				dipendenti = new Impiegato[num];
				for(int i=0;i<dipendenti.length;i++)
				{
					System.out.println("Cognome impiegato "+(i+1)+": ");
					String name = in.next();
					System.out.println("Sesso impiegato "+(i+1)+": ");
					String sex = in.next();
					System.out.println("Data assunzione "+(i+1)+": ");
					String data = in.next();
					
					Impiegato oggetto = new Impiegato(name,sex,data);
					dipendenti[i]=oggetto;
					
				}
				break;
				
			case 2:
				System.out.println();
				System.out.println("RIEMPIMENTO CON DATI DI COLLAUDO");
				//riempio l'array
				dipendenti= Impiegato.datiCollaudo();
				Impiegato.stampa(dipendenti);
				break;
				
			case 3:
				Impiegato.OrdSur(dipendenti);
				System.out.println();
				System.out.println("_ORDINAMENTO PER COGNOME_");
				Impiegato.stampa(dipendenti);
				break;
				
			case 4:
				System.out.println();
				System.out.println("STAMPA DIPENDENTI ASSUNTI TRA DUE DATE");
				System.out.println("data inizio: ");
				String dt1 = in.next();
				System.out.println("data fine: ");
				String dt2 = in.next();
				Impiegato.stampaPerDate(dt1, dt2, dipendenti);
					
			}
		
		}while(scelta!=5);
		System.out.println("Programma terminato!"
				+"\nGrazie e arrivederci.");
		
		
		
		

	}

}

Grazie mille!P.S. per l'esecuzione sto provando con i dati di collaudo (scelta 2 dello switch)