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)

Rispondi quotando


