Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-11-2007, 17:30   #1
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
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);
	}
}
Il punto è questo: come posso accedere completamente ad un oggetto dopo aver fatto un ciclo per trovarlo? In questo caso trova l'elemento con numero = 2, ma poi non so come accedervi per eventualmente modificare tutti i dati dell'oggetto (lasciamo stare funzioni, voglio solo poter entrare nell'oggetto come facevo con c++ se possibile) dato che posso solo chiamare next() per spostare l'iteratore. In sostanza mi chiedevo come ovviare alla mancanza di un "it.current()". Sicuramente è facile per voi, illuminatemi
__________________
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
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 30-11-2007, 18:13   #2
alecava
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
alecava è offline   Rispondi citando il messaggio o parte di esso
Old 30-11-2007, 18:18   #3
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
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
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2007, 09:22   #4
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
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 09:29.
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2007, 11:31   #5
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
dichiara tmp come pezzo e non come Object
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2007, 12:06   #6
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
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
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2007, 17:55   #7
alecava
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
alecava è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2007, 18:18   #8
lovaz
Senior Member
 
L'Avatar di lovaz
 
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
lovaz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v