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)