Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-02-2005, 21:49   #1
giannimesa
Senior Member
 
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727
[JAVA] sovrascrittura metodo toString()

Ciao a tutti, ho un problema su un programma da me steso che sto collaudando:
Come prescritto dalle regole di "elegante programmazione" nelle mie classi più importanti ho sovrascritto il metodo toString, in particolare in una classe che tratta l'inserimento di valori pseudocasuali in un array, ho sovrascritto il metodo toString come segue:

public String toString(int[] array){
int x=0;
String s="";
do{
s=(s+array[x]+" ");
x++;
}//do
while(x<array.length);
return s;
}//to String

il problema è che in esecuzione in corrispondenza della stringa che mi dovrebbe apparire, con la sucessione dei valori delle celle dell'array, mi compaiono valori strani:

[I@14f8dab

che imputerei a una scorretta sovrascrittura del metodo toString... in effetti sembrano indirizzi di memoria senza senso efettivo...
QUALE POTREBBE ESSERE IL PROBLEMA?

grazie.
giannimesa è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2005, 22:23   #2
giannimesa
Senior Member
 
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727
...tra l'altro, se può esservi utile per la ricerca del problema, mi sono accorto che i valori visualizzati sullo schermo al posto della sequenza di numeri delle celle dell'array, sono sempre gli stessi, sempre

[I@14f8dab

...
aiuto

non so proprio come fare....potrebbero essere problemi dovuti all'incapsulamento??in teoria no...perchè anche se passo il riferimento ad un array comunque dovrei riuscire a visualizzarne il contenuto di una cella avendo solo il riferimento all'array...vero??
giannimesa è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2005, 23:06   #3
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
innanzitutto il metodo toString ha la seguente signature:

public String toString();

se te gli dai un argometno stai facendo un averloading (sovraccaricamento), e non un overriding (ridefinizione).

Il metodo toString deve restituire una rppresentazione di un oggetto sotto forma di una stringa, per questo non dovrebbe essere necessario passargli altri argometni perche tutta l'informazione dovrebbe essere contenuta nell'oggetto su cui nvochi toString; dov'è che invochi questo metodo e su che oggetti? La cosa funzione se lo invochi su oggetti della classe che contiene la ridefinizione del metodo toString
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2005, 23:32   #4
giannimesa
Senior Member
 
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727
effettivamente io invoco il toString(...) da un main in un altra classe... ma per come ho creato la classe contenente il metodo toString(...) questa non ha variabili di classe, il suo unico compito è l'inserimento, in diversi modi, di numeri casuali in un array passato come parametro....

mi spiego la classe è questa:

package utility;
public class InsertArrayGenerator
{
/**costruttore di default
@param array*/
public InsertArrayGenerator(int[] array){
insert(0,array.length,array);
System.out.println (array.toString());
}//ArrayGenerator

/**costruttore completo utile per la creazione di array pseudo ordinati...
@param array
@param lo indice inferiore di inserimento
@param hi indice superiore di inserimento
*/
public InsertArrayGenerator(int[] array,int lo, int hi){
insert(lo,hi,array);
array.toString();
System.out.println (array.toString());
}//ArrayGenerator

/**inserisce valori pseudocasuali nelle celle dell'array comprese tra gli indici.
I valori possibili sono da 0 alla dimensione dell'array.Se l'indice inferiore e' maggiore
o uguale all'indice superiore non esegue nessun inserimento.
Gli indici si riferiscono all'indice della cella.
@param lo indice inferiore
@param hi indice superiore
*/
private void insert(int lo,int hi,int[] array){
if (lo>=hi); //se la condizione e' verificata non effettua nessun inserimento
else {
for(int x=lo; x<hi; x++){
array[x]=(int)((Math.random()*Integer.MAX_VALUE)/1);
}//for
}//else
}//insert

/**mette in output su schermo l'array passato come parametro in sequenza secondo l'indice delle celle
@param int[] a array da mettere in stringa
@return s stringa contenente i valori delle celle dell'array
*/
public String toString(int[] array){
int x=0;
String s="";
do{
s=(s+array[x]+" ");
x++;
}//do
while(x<array.length);
return s;
}//to String

}//ArrayGenerator
giannimesa è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 00:01   #5
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
per ottenere quello che vuoi devi fare:

toString(array);

non array.toString();


con quest'ultima istruzione invochi il metodo toString della classe Array, non il tuo metodo toString di
InsertArrayGenerator; poi ti consiglio di cambiare nome al tuo metodo toString che semplicemente stampa un array dato cme parametro, mentre come ti ho detto prima il metodo toString è pensato per stamapare le informazioni di questo oggetto, non di un altro passato come parametro.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 00:05   #6
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Il metodo toString() viene di solito usato per dare una descrizione della classe e del suo contenuto, quindi se la classe non ha contenuti, puoi inserire solo una descrizione che indica la funzione della classe...
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 01:05   #7
giannimesa
Senior Member
 
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727

fatto ragazzi perfetto funziona tutto... efettivamente una era una svista... troppo codice...è da giorni che continuo imperterrito davanti al pc...

poi ho anche, come consigliato, cambiato nome al metodo...così non si rischia di ingannarsi....

a proposito qualcuno di voi per caso saprebbe darmi delle indicazioni riguardo metodi per determinare il tempo...

System.currentTimeMillis()

ad esempio io ora utilizzo questo, però mi servirebbe qualcosa di più preciso rispetto ai ms che ritorna tale metodo...
L'utilizzo è per un benchmarck test tra due tipi di algoritmi differenti...e a meno di non dare in pasto ai miei due algoritmi, array di dimensioni colossali i ms spesso si fermano a 0!!!
certo sarà anche merito del mio PC... però se uno volesse qualcosa di più preciso????

grazie ancora di tutto....w il forum!!!
giannimesa è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 01:09   #8
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2595
Non sono tanto convinto del tuo modo di procedere.
Ci sono dei problemi concettuali, o meglio, dei comportamenti che non mi sembrano corretti; ditemi se sbaglio.
  1. Non mettere un System.out.println in un costruttore. Non ha molto senso.
  2. Il metodo toString viene chiamato automaticamente quando scrivi System.out.println(array); quindi non è necessario chiamarlo esplicitamente.
  3. Ma soprattutto, tu stai creando una classe InsertArrayGenerator con al suo interno un metodo toString. Questo metodo sovrascrive quello di default, ok, ma per istanze di InsertArrayGenerator. Insomma, tu nel main dovresti istanziare un oggetto InsertArrayGenerator, e su questo fare il toString (che come dicevo prima è automatico quando fai un print).
    In altre parole, secondo me sarebbe meglio che tu costruissi una classe che crea un oggetto array, e poi ci fa quello che vuoi; allora quando scriverai i metodi non dovrai passare l'array come parametro, ma farai qualcosa tipo:
    InsertArrayGenerator pippo = new InsertArrayGenerator();
    pippo.insert(lo, hi);
Tutto ciò nell'ipotesi che io abbia capito qualcosa di programmazione OO.
Attendo conferma/smentita
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 01:17   #9
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
per misurare il tempo ripeti piu volte in un for l'algoritmo da misurare
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 02:32   #10
giannimesa
Senior Member
 
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727
Quote:
Non sono tanto convinto del tuo modo di procedere....
effettivamente in un caso generale avresti ragione te, guldo76, anzi per quanto riguarda il metodo to string hai proprio ragione te... effettivamente sarebbe meglio metterlo da un'altra parte...
Però nel mio caso specifico avevo l'esigenza di ridurre al minimo le righe di codice e poichè tale costruttore nel mio programma viene chiamato moltissime volte e purtroppo non in modo ricorsivo ho trovato duopo metterlo lì dov'è....anche a scapito della leggibilità del codice, nonchè andare contro i principi della OOP...

Generalmente la cosa migliore, che io sappia, sarebbe fare come dici te, una classe che mi genera l'oggetto, con magari dei metodi tra i quali ci può essere anche il toString famoso, e poi utilizzare oggetti di tale classe in altre classi modificandoli... parametrizzandoli ecc... sempre però facendo uso dei metodi della classe stessa.... infatti un eventuale array generato da una classe , come in genere ogni variabile di classe/istanza dovrebbe essere "private".
giannimesa è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 16:38   #11
giannimesa
Senior Member
 
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 727
Quote:
per misurare il tempo ripeti piu volte in un for l'algoritmo da misurare
CIOè? dovrei contare praticamente le ricorsioni che fa il mio algoritmo???
Se così però dovrei modificare la classe dell'algoritmo, e non vorrei, anche perchè oltre a rallentarmelo (magari poco, ma comunque un po') mi calcolerebbe sempre il numero di cicli fatti dall'algoritmo, anche quando andrò ad utilizzare efettivamente l'algoritmo, non per un benchmarck test.... questo non è utilie....

almeno se ho capito bene quel che volevi dire..... non c'è in qualche modo la possibilità di ottenere il clock del processore?
giannimesa è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2005, 16:44   #12
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
non hai capito...per misurare chiama piu volte il tuo metodo , ad esempio, se vuoi misurare il tempo del metodo mio_metodo:

long time = tempo_corrente;
for(int i = 0; i < 1000; i++)
metodo();
time = tempo_corrente - time;

quindi il tempo di esecuzione del tuo metodo sarà time /1000
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
La capsula SpaceX Dragon CRS-33 ha acces...
La NASA è sempre più vicin...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
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:38.


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