|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
[JAVA] Problema classe che usa Iterator
Ciao a tutti..Ho un problema abbastanza fastidioso
C:\Enrico\università\esercizi java>javac LCITest.java .\LCI.java:16: cannot find symbol symbol : class Iterator location: class LCI public Iterator enumera(){ ^ .\LCI.java:21: cannot find symbol symbol : class Iterator location: class LCI private class LCIIterator implements Iterator{ ^ LCITest.java:14: cannot find symbol symbol : class Iterator location: class LCITest Iterator it = lista.enumera(); ^ 3 errors La classe LCI è questa: public class LCI{ /**OVERVIEW: la classe creao oggetti ListaConcatenataDiInteri che sanno aggiungere oggetti NodoInt in testa e che hanno un iteratore per gestirli*/ private NodoInt testa; public LCI(){ testa = null; } public void addInTesta(NodoInt x){ x.setSuccessivo(testa); testa = x; } public Iterator enumera(){ /**REQUIRES: non modificare la lista quando l'Iteratore è in uso*/ return new LCIIterator(); }//il metodo generatore private class LCIIterator implements Iterator{ private NodoInt dove; public LCIIterator(){ dove = testa; } public boolean hasNext(){ return dove != null; } public Object next(){ return new Integer(dove.getValore()); //wrapping del tipo che restituisce getValore(cioè un int) in uno di tipo non primitivo(Integer) } public void remove(){ dove = dove.getSuccessivo(); } } } la classe NodoInt serve solo per creare un oggetto nodo: public class NodoInt{ /**OVERVIEW: classe che crea oggetti di tipo NodoInt con 1 valore intero e puntatore al successivo elemento di una lista fA: <intero,riferimento nodo successivo> -> <val,succ> IR: val != int && succ != NodoInt*/ private int val; private NodoInt succ; public NodoInt(int n){ val = n; succ = null; } public int getValore(){ /** @return: this.val*/ return val; } public NodoInt getSuccessivo(){ /**MODIFIES: restituisce il riferimento a this (effetto collaterale)*/ return succ; } public void setSuccessivo(NodoInt x){ /**EFFECTS: modifica il valore di this (variabile succ) che diventa il riferimento a x MODIFIES: modifica il valore di this (variabile succ) che diventa il riferimento a x (effetto collaterale) @param: NodoInt*/ succ = x; } } La classe del main è questa: public class LCITest{ public static void main(String[] args){ LCI lista = new LCI(); NodoInt a = new NodoInt(12); NodoInt b = new NodoInt(20); NodoInt c = new NodoInt(-30); a.setSuccessivo(b); b.setSuccessivo(c); lista.addInTesta(a); Iterator it = lista.enumera(); int i = 0; while(it.hasNext()){ int k = ((Integer)it.next().intValue()); //wrapping da Integer a int per recuperare il valore dell-elemento i-esimo della lista System.out.println("valore "+i+" della lista: "+k+"\n"); it.remove(); i++; } } } Grazie!!!
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Hai importato java.util.Iterator?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Ecco non sapevo di doverla importare quella libreria, ci provo e vediamo se funge! Grazie
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Ok problema risorlto..solo ora il compilatore mi da errore all'istruzione:
int k = ((Integer)it.next()).intValue(); ---------------------------^ //wrapping da Integer a int per recuperare il valore dell-elemento i-esimo della lista E' sempre del tipo cannot find symbol, insomma poche info utili Ho controllato l'API di Integer e così si usa, a quanto pare, però mi sembra molto strano, a livello di semantica dovrebbe funzionare
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Magari se posti tutto il messaggio, come hai fatto nel primo post: Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Quote:
Sembra che qualcosa non vada a buon fine. Ho dichiarato 4 oggetti di tipo NodoInt e gli ho passato i rispettivi valori, li ho concatenati tramite il metodo setSuccessivo() mentre la lista concatenata ha in testa il nodoInt "a". Ora però mi stampa solo il valore di "a" e non degli altri elementi, ho controllato l'iteratore della classe LCI però mi pare vada tutto bene nella semantica..voi vedete qualche errore?? /** output: valore 0 della lista: 12 //qui andrebbero gli altri valori della lista e cioè di b,c,d */
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Io darei un'occhiata a next perchè secondo me non "nexta"...
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Quote:
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Puoi ripostare il codice completo, magari tra i tag code?
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Eccolo:
Codice:
public class LCI{
/**OVERVIEW: la classe creao oggetti ListaConcatenataDiInteri che sanno aggiungere oggetti NodoInt in testa e che hanno un iteratore per gestirli*/
private NodoInt testa;
public LCI(){
testa = null;
}
public void addInTesta(NodoInt x){
x.setSuccessivo(testa);
testa = x;
}
public Iterator enumera(){
/**REQUIRES: non modificare la lista quando l'Iteratore è in uso*/
return new LCIIterator();
}//il metodo generatore
private class LCIIterator implements Iterator{
private NodoInt dove;
public LCIIterator(){
dove = testa;
}
public boolean hasNext(){
return dove != null;
}
public Object next(){
return new Integer(dove.getValore()); //wrapping del tipo che restituisce getValore(cioè un int) in uno di tipo non primitivo(Integer)
}
public void remove(){
dove = dove.getSuccessivo();
}
}
}
//la classe NodoInt serve solo per creare un oggetto nodo:
public class NodoInt{
/**OVERVIEW: classe che crea oggetti di tipo NodoInt con 1 valore intero e puntatore al successivo elemento di una lista
fA: <intero,riferimento nodo successivo> -> <val,succ>
IR: val != int && succ != NodoInt*/
private int val;
private NodoInt succ;
public NodoInt(int n){
val = n;
succ = null;
}
public int getValore(){
/** @return: this.val*/
return val;
}
public NodoInt getSuccessivo(){
/**MODIFIES: restituisce il riferimento a this (effetto collaterale)*/
return succ;
}
public void setSuccessivo(NodoInt x){
/**EFFECTS: modifica il valore di this (variabile succ) che diventa il riferimento a x
MODIFIES: modifica il valore di this (variabile succ) che diventa il riferimento a x (effetto collaterale)
@param: NodoInt*/
succ = x;
}
}
//La classe del main è questa:
public class LCITest{
public static void main(String[] args){
LCI lista = new LCI();
NodoInt a = new NodoInt(12);
NodoInt b = new NodoInt(20);
NodoInt c = new NodoInt(-30);
a.setSuccessivo(b);
b.setSuccessivo(c);
lista.addInTesta(a);
Iterator it = lista.enumera();
int i = 0;
while(it.hasNext()){
int k = ((Integer)it.next().intValue()); //wrapping da Integer a int per recuperare il valore dell-elemento i-esimo della lista
System.out.println("valore "+i+" della lista: "+k+"\n");
it.remove();
i++;
}
}
}
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Ciao, l'errore è nel modo in cui hai usato l'oggetto LCI e i NodoInt.
Hai prima settato i nodi in modo che l'uno puntasse al successivo, praticamente hai a->b->c Poi però hai usato il metodo addInTesta su a. addInTesta setta a come nuova testa ma setta anche il successore di a alla vecchia testa e quindi ottieni a->null Per risolvere devi usare solo addInTesta per inserire i vari nodi e non usare direttamente setSuccessivo: Codice:
lista.addInTesta(c); lista.addInTesta(b); lista.addInTesta(a); |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:18.




















