E sono ancora qua, dopo il valido aiuto che mi avete dato nel topic precedente.
Ora che ho un metodo per ordinare un vector di oggetti secondo il loro attributo GregorianCalendar (dal più antico al più recente), devo ideare un metodo che mi permetta di inserire oggetti (che hanno due attributi GregorianCalendar: dataInizio e dataFine) nel vector se e solo se non sono contemporanei agli altri oggetti già inseriti(completamente o anche parzialmente) Ad esempio, per farvi capire:
Ho Obj1 con dataInizio=1/1/2005 e dataFine 6/1/2005
Ho Obj2 con dataInizio=6/1/2006 e dataFine 6/8/2006
Ho Obj3 con dataInizio=9/9/2006 e dataFine 10/12/2006
Il metodo mi deve poter far inserire un obj4 con dataInizio 2/12/2003 e dataFine 6/12/2003 oppure un Obj4 con dataInizio 12/5/2010 e dataFine 19/6/2010 perché il primo è precedente a tutti gli altri oggetti già inseriti mentre il secondo è successivo a tutti. Ma anche mi deve poter far inserire un Obj4 con dataInizio 6/6/2005 e dataFine 8/11/2005 perchè esso occupa uno spazio temporale ancora "libero", tra Obj1 e Obj2.
Invece, non deve lasciarmi inserire, ad esempio un Obj4 con dataInzio 15/9/2006 e dataFine 30/11/2006 (completamente in contemporanea a Obj3) o anche Obj4 con dataInizio 5/8/2006 e dataFine 9/8/2006 (parzialmente in contemporanea con Obj2).
Scusate se mi sono dilungato ma voglio farvi capire bene cosa dovrebbe fare questo metodo. Un altra cosa: fate conto che il vector, quando si inserisce un oggetto, sia sempre ordinato dal più antico al più recente.
Ecco il codice che ho realizzato:
codice:
[...] // inserimento dati dell'oggetto
boolean cont3=false;
int dim=vector.size();
// if necessario solo se gli eventi già inseiri nel vector sono 1 o più (se il vector è vuoto l'inserimento dell'oggetto è certo)
if(dim>0){
//controllo se l'oggetto è successivo a tutti gli altri eventi
Oggetto locale=vector.get(dim-1); // prende l'ultimo elemento del vector
GregorianCalendar _inizio,_fine;
_fine=locale.getDataFine();
if(dataInizio.compareTo(_fine)>0)
cont3=true;
else
cont3=false;
if(dim>1 && cont3==false){
// ciclo while che controlla se è libero lo spazio tra due eventi, necessario se gli eventi sono almeno 2
int i=dim-2;
while(i!=1 && cont3==false){
locale=vector.get(i);
_fine=locale.getDataFine();
_inizio=vector.get(i+1).getDataInizio();
if(dataInizio.compareTo(_fine)>0 && dataFine.compareTo(_inizio)<0)
cont3=true;
else
cont3=false;
i--;
};
}// chiusura if dim>1
// se ancora cont3=false, potrebbe essere che l'oggetto sia precedente a tutti gli altri:
locale=vector.get(0);
_inizio=locale.getDataInizio();
if(dataFine.compareTo(_inizio)<0)
cont3=true;
} // chiusura dell'if dim>0
else
cont3=true;
if(cont3==false)
System.out.printf(ERRORE_PERIODO);
[...]/inserimento nel vector se cont3=true oppure si riavvia il ciclo chiedendo nuovi dati
Il problema è che il metodo non funziona sempre, mi lascia sempre inserire eventi successivi o precedenti a tutti gli altri ma quando si tratta di inserire oggetti "incastrati" tra gli altri già inseriti non sempre me lo permette ma mi presenta il messaggio ERRORE_PERIODO, evidentemente perchè cont3 rimane false.
Grazie in anticipo!