View Full Version : [java]stampare tutti gli appuntamenti in una certa data
misterxxitalia
20-03-2008, 14:48
ciao a tutti come scritto nel titolo devo stampare tutti gli appuntamenti in una certa data gli appuntamenti sono caricati in un vector chiamato appuntamenti.
questo è il metodo incriminato che nn va mi dice di nn poter trovare il metodo getData()...
public void stampaaArrayList()
{for (int w=0; w<appuntamenti.size();w++)
{if (appuntamenti.get(w).getData().equals("18/3/2008"))
{System.out.println("indice nel vettore:"+w+" "+appuntamenti.get(w).toString());
}
}
}
e questo è un po di codice...
class Agenda
{
private Date data;
private String ora;
private String nome;
private String cognome;
private String descrizione;
private String priorita;
Agenda(String data, String ora, String nome, String cognome, String descrizione, String priorita) throws InserimentoErratoException, IOException,ParseException{
this.setData(data);
setOra(ora);
setNome(nome);
setCognome(cognome);
setDescrizione(descrizione);
setPriorita(priorita);
}
public String toString()//metodo per la lettura dell'array
{
return "ora:"+" "+ora +" "+"data:"+data +" "+ "nome:"+ " "+nome+" "+"cognome:" +cognome+" "+ "descrizione:" +" "+descrizione+" "+ "priorita"+" "+priorita;
}
public void setData(String dataString) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
this.data = sdf.parse(dataString);
}
public String getData() {
SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
String datainput = f.format(data);
return datainput;
}
public void setOra(String ora) //simile a quello di sopra...
public void setOra(String ora) //idem...
//e via dicendo per cognome descizione ecc...
private Vector appuntamenti;
public Agenda ()
{
appuntamenti = new Vector();
}
public Vector getappuntamenti()
{
Vector appunt = (Vector)appuntamenti.clone();
return appunt;
}
public void stampaArrayList()
{
for (Enumeration e = appuntamenti.elements();e.hasMoreElements();)
for (int w =0; w < appuntamenti.size();w++)
{
System.out.println("indice nel vettore:"+w+" "+e.nextElement().toString());
}
}
per favore aitatemi nn capisco l'errore!!
mi dice di nn poter trovare il metodo getData()...Visto che non stai usando i "generics", il metodo get() di Vector ha come tipo di ritorno Object.
private Vector<Agenda> appuntamenti;
public Agenda ()
{
appuntamenti = new Vector<Agenda>();
}
public Vector getappuntamenti()
{
Vector appunt = (Vector)appuntamenti.clone();
return appunt;
}
public void stampaArrayList()
{
for (Enumeration e = appuntamenti.elements();e.hasMoreElements();)
for (int w =0; w < appuntamenti.size();w++)
{
System.out.println("indice nel vettore:"+w+" "+e.nextElement().toString());
}
}
oppure
public void stampaaArrayList()
{for (int w=0; w<appuntamenti.size();w++)
{if ( ((Agenda)appuntamenti.get(w)).getData().equals("18/3/2008"))
{System.out.println("indice nel vettore:"+w+" "+appuntamenti.get(w).toString());
}
}
}
misterxxitalia
20-03-2008, 15:48
scusa vladix ma nn posso usare le <> perchè è un linguaggio java troppo evoluto non consentito nel progetto...ma io ho il bisogno di far tornare una stringa giusto?che metodo uso allora apposto di get(w)??
beh se non puoi usare i generici , bisogna fare il cast
((Agenda)appuntamenti.get(w)).getData()
misterxxitalia
20-03-2008, 16:01
scusa non conosco come funziona il cast infatti sbaglio sicuramente qualche cosa...
public void stampaaArrayList()
{for (int w=0; w<appuntamenti.size();w++)
{if ((Agenda)appuntamenti.get(w)).getData().equals("18/3/2008"))
{System.out.println("indice nel vettore:"+w+" "+appuntamenti.get(w).toString());
}
}
}
se magari me lo spieghi...
scusa non conosco come funziona il cast infatti sbaglio sicuramente qualche cosa...Infatti hai dimenticato una parentesi (.
Tra l'altro, se formatti con "dd/MM/yyyy" non puoi di certo ottenere "18/3/2008" ma "18/03/2008".
misterxxitalia
20-03-2008, 16:20
infatti avevi ragione!:Prrr:
se metto una data che esiste mi stampa l'appuntamento ma se non c'è come lancio un'eccezione??tipo la mia eccezione inserimentoerratoException..
misterxxitalia
20-03-2008, 16:31
mi rispondo da solo un bell else alla fine e lancio l'eccezione!!grazie di tutto!
misterxxitalia
21-03-2008, 10:58
scusate di nuovo sto facendo un controllo simile a quello di prima...
Rubrica r = new Rubrica ();//creo una nuova rubrica
Agenda a = new Agenda();//creo una nuova agenda
String rimuovi = r.leggiStringa();
int i = Integer.parseInt(rimuovi);int w=0;
for (int l=0; w<a.getappuntamenti().size();w++)
{
if (((Rubrica)r.getnominativi().get(i)).getNome().equals((Agenda)a.getappuntamenti().get(l).getNome()&&(Rubrica)r.getnominativi().get(i)).getCognome().equals((Agenda)a.getappuntamenti().get(l).getCognome()))
System.out.println("stai eliminando un nominativo che ha un appuntamento!");
else
nominativi.removeElementAt(i);
in pratica se il mio nominativo che vado a eliminare ha lo stesso nome e cognome presente in un appuntamento mi stampa stai eliminando...altrimenti rimuovi l'elemento.il problema che qui...equals((Agenda)a.getappuntamenti().get(l).getNome()
non mi fa accedere a getNome() sbaglio a fare il cast??grazie!
wingman87
21-03-2008, 11:09
Per richiamare getNome dovresti scrivere:
((Agenda)a.getappuntamenti().get(l)).getNome()
Così fai il cast sull'oggetto restituito dalla get e su questo (che è diventato Agenda) richiami la getNome
misterxxitalia
21-03-2008, 11:29
allora ho scritto cosi...
if ((((Rubrica)r.getnominativi().get(i)).getNome().equals((Agenda)a.getappuntamenti().get(l)).getNome())&&(((Rubrica)r.getnominativi().get(i)).getCognome().equals((Agenda)a.getappuntamenti().get(l)).getCognome()));
mi da come errore:
bolean cannot be dereferenced stai usando la notazione col punto per accedere ad un campo o ad un metodo di un altro oggetto pero la variabile che stai usando non è un oggetto:non ha ne metodi ne campi...
di quale variabile parla?che sbaglio??
wingman87
21-03-2008, 11:36
Hai solo cannato un po' di parentesi:
if(((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(l)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(l)).getCognome()));
Così mi sembra corretta
misterxxitalia
21-03-2008, 11:59
maledetto bluej!!hai ragione!!scusa come faccio a mettere un controllo tipo...sei sicuro di voler eliminare l'elemento??
wingman87
21-03-2008, 12:17
Basta chiedere conferma, cioè... non vorrei darti una risposta banale, non mi sembra difficile, stampi la domanda "sicuro di voler cancellare l'elemento(y/n)?" e poi leggi la risposta, se è y cancelli, altrimenti no. Ma forse non era quello che volevi
misterxxitalia
21-03-2008, 12:40
no no perfetto!le cose piu semplici sono le piu effficaci!se ho dei problemi posto. x ora grazie!!
PS if miascelta == "y"...o uso il metodo equals()???
wingman87
21-03-2008, 13:06
Se miascelta è una String usi equals, se è un char usi miascelta=='y'. Occhio che nel caso di char si usano gli apici e non le virgolette.
misterxxitalia
21-03-2008, 19:32
scusate ho controllato meglio il metodo xo mi sono accorto che fa quello che si pare
ovvero scrive sempre "stai eliminando un nominativo che ha un appuntamento!"
questo è il metodo forse sbaglio qualche stupidagine!!
System.out.println ("dammi l'indice del vettore da eliminare");
System.out.println("==>");
try
{
String rimuovi = r.leggiStringa();
int i = Integer.parseInt(rimuovi);
for (int l=0; l<a.getappuntamenti().size();l++)
{
if(((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(l)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(l)).getCognome()));
System.out.println("stai eliminando un nominativo che ha un appuntamento!");
r.removeNominativo(i);
wingman87
21-03-2008, 19:49
Perché hai messo un ';' subito dopo l'if, questo ';' viene preso come l'unica istruzione da eseguire nel caso in cui l'if sia vero, perché non hai usato le graffe, se invece avessi racchiuso tra graffe il corpo dell'if non ci sarebbe stato alcun problema.
Praticamente se scrivo:
if(test)
fai qualcosa;
fai qualcos'altro;
qualcos'altro viene eseguito sempre e qualcosa solo se test è vero, se invece scrivo:
if(test){
fai qualcosa;
fai qualcos'altro;
}
Entrambi vengono eseguiti solo se test è true
misterxxitalia
21-03-2008, 22:25
infatti avevi ragione...un punto e virgola che cambia il mondo!!grazie della spiegazione!
misterxxitalia
22-03-2008, 20:16
ho riscritto il metodo vorrei aggiungere la funzione che se elimino un nominativo elimino tutti i suoi appuntamenti ho scritto cosi:
if(((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(l)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(l)).getCognome()))
System.out.println("stai eliminando un nominativo che ha uno o piu appuntamenti!");
System.out.println("sei sicuro di voler eliminare il nominativo? y/n");
System.out.println("==>");
String nomelim = r.leggiStringa();
if(((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(l)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(l)).getCognome())&&nomelim.equals("y"))
a.removeAppuntamenti(l);
if(nomelim.equals("y"))
r.removeNominativo(i);
pero in questo modo elimina solo un appuntamento con quella persona e nn tutti...che stupidagine sbaglio sta volta??
misterxxitalia
24-03-2008, 09:37
up!
ma forse quel pezzo di codice dovresti metterlo in un ciclo for che cicla tutta la agenda , e magari potersti dare un id al tuo utente , x un + faccile riconoscimento
cioe invece di
((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(l)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(l)).getCognome())
scrivi
((Rubrica)r.getnominativi().get(i)).getId() == ((Agenda)a.getappuntamenti().get(l)).getId()
o se nn ti va di gestire la generazione di un id , puoi usare l'hashCode ... che e cmq univoco
misterxxitalia
24-03-2008, 10:23
no nn hai capito cosa fa quell'istruzione..in pratica ho 2 vettori sul primo c'è il nominativo:
nome cognome affinita telefono ecc
il secondo vettore c'è l'appuntamento (appuntamento con un nominativo)..
data nome cognome descizione priorita..
in pratica con quel metodo se vado a eliminare un nominativo mi deve eliminare tutti gli appuntamenti che ho con quel nominativo..ovvero vede se il nome e cognome del nominativo sono uguali al nome e cognome dell'appuntamento. se si elimina il nominativo con tutti i suoi appuntamenti.il problema che elimina un solo appuntamento e nn tutti!
ti dovresti scorere l'array agenda ... , e confrontare ogni elemento della rubrica con tutti gli elementi del agenda
for(int i = 0 ; i < rubrica.size(); i++){
String nome = ((Rubrica)r.getnominativi().get(i)).getNome();
String cognome = (Rubrica)r.getnominativi().get(i)).getCognome();
for(int y = 0; y < agenda.size(); y++){
if((nome.equals(((Agenda)a.getappuntamenti().get(y)).getNome())&&(cognome.equals(((Agenda)a.getappuntamenti().get(y)).getCognome()))
r.removeNominativo(i);
}
}
misterxxitalia
24-03-2008, 11:41
ho riscritto una cosa simile alla tua..
System.out.println ("dammi l'indice del vettore del nominativo da eliminare");
System.out.println("==>");
try
{
String rimuovi = r.leggiStringa();
int i = Integer.parseInt(rimuovi);
for (int l=0; l<a.getappuntamenti().size();l++)
{
if(((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(l)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(l)).getCognome()))
System.out.println("stai eliminando un nominativo che ha uno o piu appuntamenti!");
System.out.println("sei sicuro di voler eliminare il nominativo? y/n");
System.out.println("==>");
String nomelim = r.leggiStringa();
for (int b=0; b<a.getappuntamenti().size();b++)
{
if(((Rubrica)r.getnominativi().get(i)).getNome().equals(((Agenda)a.getappuntamenti().get(b)).getNome())&&((Rubrica)r.getnominativi().get(i)).getCognome().equals(((Agenda)a.getappuntamenti().get(b)).getCognome())&&nomelim.equals("y"))
a.removeAppuntamenti(b);
}
if(nomelim.equals("y"))
r.removeNominativo(i);
ora se avevo 10 appuntamenti con quel nominativo me ne cancella 9...xche?
misterxxitalia
25-03-2008, 15:50
up?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.