|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2006
Messaggi: 21
|
ITERATOR E LISTA A PUNT ESPLICITI
![]() a puntatori espliciti, questa classe deve implementare l'interfaccia iterator. La lista deve contenere in ordine crescente ogetti PAROLA. Quindi la classe dizionario deve contere i metodi: public void add(Parola p) // per inserire in ordine le parole public Iterator iterator() public boolean hasNext() public object next() public void remove() Io ho pensato di fare cosìì, ma mi da errore nel metodo add e non so neanche se la logica del programma è giusta!!! Una cosa del genere era al testo d'esame dove mi hanno bocciato ![]() e sono sicuro che ridarà di nuovo una cosa del genere, vi prego HELP!! import java.util.Iterator; class Nodo{ Object info; Nodo next; }//Nodo public class Dizionario_Concatenato { Nodo testa; public Dizionario_Concatenato(){ testa=null; }//costruttore public Iterator iterator() { return new Iterator(); }//iterator public void add(Parola p) { Nodo cor=testa; Nodo prec=null; Nodo nuovo=new Nodo(); if(testa==null){ nuovo.info=p; nuovo.next=testa; testa=nuovo; return; } Iterator iteratore=iterator(); int c=0; while(iteratore.hasNext()){ Parola corrente=(Parola)iteratore.next(); c=corrente.compareTo(p); if(c>0){ nuovo.info=p; nuovo.next=cor; prec=nuovo; } } }//add public class Iterator{ private Nodo cor; private Nodo prec; public Iterator(){ cor=testa; prec=null; }//costruttore public Object getFirst(){ if(testa==null) return null; return testa.info; }//getFirst public boolean hasNext() { if(cor==null) return testa!=null; else return cor!=null; }//hasNext public Object next(){ if(testa==null){ cor=testa; return getFirst(); } else{ if(cor.next==null) return null; prec=cor; cor=cor.next; return cor.info; } }//next public void remove() { if(cor==testa) testa=cor.next; prec.next=cor.next; }//remove }//ITERATOR }//DIZIONARIO_CONCATENATO CIAO GRAZIE A TUTTI!! |
![]() |
![]() |
![]() |
#2 |
Messaggi: n/a
|
l'idea dei Nodi come li hai fatti te funziona, ma ci sbagli nel metodo add(Parola p) perché usi nel ciclo while(iteratore.hasNext()) il reference "Parola corrente" per tenere il punto di dove sei nell'iterazione, ma poi usi cor e prec nell'if successivo, che però non sono mai stati modificati. sempre nel metodo add c'è il rischio che la Parola non venga aggiunta nel caso in cui nessun elemento faccia scattare l'if (che linguaggio del cavolo
![]() Poi, sicuramente i tuoi prof hanno detto "la classe dizionario deve implementare l'interfaccio Iterable", quindi modifica l'intestazione di Dizionario in "public class Dizionario implements Iterable<Object>", e definisci il metodo Iterator() che adesso il compilatore ti chiederà di mettere. nella classe che fa da iteratore per il tuo Dizionario, devi farle implementare l'interfaccia java.util.Iterator (così un oggetto di tale classe sarà ritornabile dal metodo Iterator della classe Dizionario, no?), quindi modifica la tua classe Iterator (che naturalmente rinominerai in qualcosa di un po' più diverso dall'interfaccia Iterator che esiste nel package java.util, tipo DizIterator ![]() tieni conto che il sottoscritto sta imparando il java da solo ed è alle prime armi quindi potrebbe dirti cazzate, ma per questa volta non credo ![]() P.S. INDENTA IL CODICEEEEEEEEEE! |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jan 2006
Messaggi: 21
|
GRAZIE!!
grazie sei stato molto gentile!!! sto provando a cambiare il metodo add ma non ci riescoooo no nmi esceeeee......
![]() ![]() GRAZIE CIAO |
![]() |
![]() |
![]() |
#4 |
Messaggi: n/a
|
Codice:
public void add(Parola p) { Nodo cor=testa; Nodo prec=null; Nodo nuovo=new Nodo(); nuovo.info=p; //metti qui questo statement: in ogni caso nuovo dovra avere le info (è meglio se fai un costruttore di Nodo che prenda come argomento l'oggetto info e lo attacchi immediatamente if(testa==null){ // nuovo.next=testa; <---- inutile: se testa==null, nuovo.next sarà null, poiché questo campo non è stato inizializzato esplicitamente testa=nuovo; return; } Iterator iteratore=iterator(); while(iteratore.hasNext()){ prec=cor; cor=(Parola)iteratore.next(); if(cor.compareTo(p)>0) //se la nuova parola è successiva alfabeticamente break; //va agli statement dopo il while che aggiungono la parola } nuovo.next=cor.next; //la nuova parola avrà come successiva quella che adesso è successiva a corrente cor.next=nuovo; //e la successiva a corrente sarà la nuova }//add poi, il metosdo compareTo() è quello della classe String che vorresti usare? se sì, allora perché il campo info non lo metti direttamente di tipo String?? OCIO: non viene contemplato il caso che la parola sia già esistente nel dizionario... basta che controlli che compareTo() non ritorni 0, che (sempre supponendo che tu abbia voluto usare String come tipo delle info, e non un tuo metodo) significa che le due stringhe sono uguali Curiosità: dove studi? ciao |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:29.