PDA

View Full Version : [JAVA] Problema stampare Array [I@19821f


matteo p.
04-01-2012, 19:12
Salve a tutti!
Sto imparando il java e sono giunto agli Array :D
Pero'... come provo ad inizializzare e stamparne una mi viene fuori questo codice strano:
[I@19821f
Il codice che scrivo pero' è giusto, infatti non ho errori durante la compilazione!

Questo è il codice che uso:
public class ProvaArray {
public static void main(String[] args) {

int intArray [] = {1,2,3,4};

System.out.println(intArray);
}
}

Ho provato anche con altri tipi di dato e con una multidimensionale: sempre lo stesso errore!

Come mai? Cosa posso fare?

Grazie,
MP

Agat
04-01-2012, 19:28
Mettila così, un array è un armadio nei cui cassetti si mettono i valori: quindi, per stampare i valori, occorre prima aprire i cassetti ad uno ad uno, e non tutto l'armadio in un colpo :D (A meno che... ma per ora, fai così che è più facile)

ndakota
04-01-2012, 19:30
Ciao, gli array a quanto pare non hanno un metodo toString ridefinito. Quello è il metodo toString ereditato da Object in azione :D
Se vuoi stampare l'intero contenuto di un array in qualche modo, dovrai farti tu un pezzetto di codice che lo fa. Altrimenti, gli oggetti ArrayList, LikedList e Vector hanno un metodo toString che fa quello che vuoi ma non credo sia il tuo caso.

cifa
04-01-2012, 19:32
Per stampare il contenuto di un array devi fare un ciclo per scorrerlo, esso non ha un metodo toString ridefinito, ma quello ereditato da Object

public class ProvaArray {
public static void main(String[] args) {

int intArray [] = {1,2,3,4};
for(int i=0; i<intArray.length; i++)
System.out.println(intArray[i]);
}
}



EDIT: Ops, hanno risposto altri meglio di me :D

matteo p.
04-01-2012, 19:55
Grazie mille! Gentilissimi e velocissimi :D

Pero', allora, come mai se uso i "char" al posto degli "int" mi stampa per bene?

public class ProvaArray {
public static void main(String[] args) {

char intArray [] = {'a','b','d','c'};

System.out.println(intArray);
}
}

ndakota
04-01-2012, 20:14
Grazie mille! Gentilissimi e velocissimi :D

Pero', allora, come mai se uso i "char" al posto degli "int" mi stampa per bene?

public class ProvaArray {
public static void main(String[] args) {

char intArray [] = {'a','b','d','c'};

System.out.println(intArray);
}
}

La classe PrintStream, che stai usando senza saperlo, chiamando il metodo


System.out.println


Ha un metodo println che accetta char[] ma non int[] o long[].
Puoi vederli qui i parametri che accetta.

http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html

Come puoi vedere ha sia char che char[]. Ma riguardo gli altri tipi primitivi, ha solo la variante non array.

Edit: In ogni caso non è una cosa che ti sarà molto utile, temo. Nemmeno io lo sapevo: ho spulciato i sorgenti.

matteo p.
04-01-2012, 20:29
Ok, dubbi dissipati, grazie mille! :D

clockover
04-01-2012, 22:54
Ciao, gli array a quanto pare non hanno un metodo toString ridefinito. Quello è il metodo toString ereditato da Object in azione :D
Se vuoi stampare l'intero contenuto di un array in qualche modo, dovrai farti tu un pezzetto di codice che lo fa. Altrimenti, gli oggetti ArrayList, LikedList e Vector hanno un metodo toString che fa quello che vuoi ma non credo sia il tuo caso.

Se dai uno sguardo alla classe Arrays sono già stati ridefiniti alcuni metodi toString :)

ndakota
04-01-2012, 23:10
Se dai uno sguardo alla classe Arrays sono già stati ridefiniti alcuni metodi toString :)

Hai ragione, sono andato a vedere. Chissà quanto codice siamo andati a scrivere inutilmente senza sapere che esisteva già qualche metodo che facesse al caso nostro. La libreria standard di Java è immensa.