Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
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


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
I coupon nascosti di Amazon si rinnovano...
Disponibili i video e le immagini in alt...
La NASA ha rilasciato le prime fotografi...
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: 20:07.


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