|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 3567
|
[Java] iteratore e oggetti, problema
Mi sto confondendo le idee e non trovo niente nemmeno googlando o rileggendo il libro di eckel (probabilmente ho capito male dei passi).
Io sono in questa situazione: Codice:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import com.bruceeckel.swing.*;
import com.bruceeckel.util.*;
class pezzo {
pezzo(int a) { numero = a; }
int numero;
}
class numerone {
static int numerostatic;
static void funzione() { numerostatic +=1; }
}
class iteratore {
public static void main(String[] args) {
final ArrayList lista = new ArrayList();
lista.add(new pezzo(numerone.numerostatic));
numerone.funzione();
lista.add(new pezzo(numerone.numerostatic));
numerone.funzione();
lista.add(new pezzo(numerone.numerostatic));
numerone.funzione();
lista.add(new pezzo(numerone.numerostatic));
class TextArea extends JApplet {
String temp;
boolean flag = true;
int Input;
private JTextArea t = new JTextArea(20, 40);
public TextArea() {
Iterator it = lista.iterator();
while(it.hasNext() && flag == true) {
if((((pezzo)it.next()).numero) == 2) {
t.append("Elemento 2 trovato\n");
flag = false;
}
} // da qui sono uscito dal while e l'iteratore è sull'oggetto con numero = 2
Input = (((pezzo)it.next()).numero); //il problema è qui, io non voglio it.next() ma accedere direttamente all'oggetto
temp = Integer.toString(Input);
t.append(temp); //qui temp è uguale a 3, io voglio che sia uguale a 2, cioè che lo prenda dall'oggetto 2 e non dal 3!
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(new JScrollPane(t));
}
}
Console.run(new TextArea(), 475, 425);
}
}
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W Il miglior topic di sempre |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Nov 2004
Città: Luino
Messaggi: 20
|
se dichiari una variabile fuori dal ciclo di tipo pezzo con nome tmp e poi la usi nel ciclo così...
while(it.hasNext() && flag == true) { tmp = (pezzo)it.next; if(tmp.numero == 2) { t.append("Elemento 2 trovato\n"); flag = false; } } ...quando il ciclo trova quello che vuoi nella variabile tmp hai il riferimento all'oggetto che cercavi e ci fai tutto quello che vuoi.... PS se dichiari ArrayList usando il meccanismo dei generics, cioè ArrayList<pezzo> , puoi evitare i cast che rendono il codice meno elegante |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 3567
|
!
ora si, tutto ha mooolto senso. Grazie. non sapevo di poter fare tmp = (pezzo)it.next;
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W Il miglior topic di sempre |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 3567
|
Nel modo che mi hai suggerito mi dice che non sa cosa sia "numero" in questa riga:
if(tmp.numero == 2) come posso aggiustare? Ho definito un Object tmp e ho fatto tmp = (pezzo)it.next(); ma poi cade nell'if.
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W Il miglior topic di sempre Ultima modifica di D3stroyer : 01-12-2007 alle 10:29. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
dichiara tmp come pezzo e non come Object
__________________
iMac 27" 5K |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 3567
|
ok, non è molto pratico, forse c'è un modo piu' intelligente. Per ora grazie a voi ho risolto così.
Codice:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import com.bruceeckel.swing.*;
import com.bruceeckel.util.*;
class pezzo {
pezzo() {}
pezzo(int a) { numero = a; }
int numero;
}
class numerone {
static int numerostatic;
static void funzione() { numerostatic +=1; }
}
class iteratore {
public static void main(String[] args) {
final ArrayList lista = new ArrayList();
lista.add(new pezzo(numerone.numerostatic));
numerone.funzione();
lista.add(new pezzo(numerone.numerostatic));
numerone.funzione();
lista.add(new pezzo(numerone.numerostatic));
numerone.funzione();
lista.add(new pezzo(numerone.numerostatic));
class TextArea extends JApplet {
String temp;
boolean flag = true;
int Input;
private JTextArea t = new JTextArea(20, 40);
pezzo tmp = new pezzo();
public TextArea() {
Iterator it = lista.iterator();
while(it.hasNext() && flag == true) {
tmp = (pezzo)it.next();
if(tmp.numero == 2) {
t.append("Elemento 2 trovato\n");
flag = false;
}
}
Input = tmp.numero;
temp = Integer.toString(Input);
t.append(temp);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(new JScrollPane(t));
}
}
Console.run(new TextArea(), 475, 425);
}
}
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W Il miglior topic di sempre |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Nov 2004
Città: Luino
Messaggi: 20
|
comunque non c'è bisogno di scrivere "pezzo tmp = new pezzo();" basta "pezzo tmp;" tanto dopo definisci tmp nel ciclo...Prima ti dava quell'errore perchè se dichiari un riferimento di tipo Object è ovvio che non avrà i metodi che hai definito tu anche se poi effettivamente quel riferimento punta a un oggetto di tipo pezzo, ma questo al compilatore non interessa, se vede il tipo Object ti fa usare solo i metodi di Object
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Un consiglio: usa nuovo for e generici, visto che stai imparando un
linguaggio è bene non partire da vecchie versioni
__________________
|Java Base| |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:08.











|







