Manipulation de tableaux, objet string et stringbuffer

Fermé
Linquisiteur - 18 févr. 2013 à 20:21
 Linquisiteur - 18 févr. 2013 à 21:41
Bonjour, je suis débutant en java et j'ai quelque question a propos. J'ai une feuille contenant divers exo mais après exécution je ne l'ai comprend pas...

1)
public static void main(String[]args)
{
StringBuffer s = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
StringBuffer t = s ;
while (t.length()>0 ) t.remove(0) ;

-> fonctionne pas!

}

2)
public static void main(String[] args)
{
String temp;
String[] s ={new String("a"), new String("b")};
temp = new String("a");
s[0] = s[1];
s[1] = temp;
}
-> j'obtiens: [Ljava.lang.String;4@aa0560e
pourquoi? A mes yeux on ne fait que inter changer ce qu'il y a dans la case 1et je la met dans la 0

3)
public static void main(String[] args)
{
char temp;
char[] s = {'a','b'};
temp = s[0];
s[0] = s[1];
s[1] = temp;
}
-> j'obtiens [c@2bc7510d
Je dois avouer ne pas comprendre.. ces un tableau?

4)
public static void main(String[] args)
{
String[] s = {new String("a"), new String("b")};
String[] w = s;
w[0] = s[1];
w[1] = s[0];
}
-> S vaut [Ljava.lang.String;@77c7bee2
-> W vaut la même chose...


Si vous sauriez m'expliquez ce qu'il se passe... j'ai d'autre exo que je ne comprend pas mais ceux ci pourront peut être me débloquer sur les autres

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 18/02/2013 à 20:31
1) la méthode remove n'existe pas !
Si tu veux supprimer un caractère tu peux utiliser t.deleteCharAt(0);

2, 3, 4) ce que tu affiches c'est la valeur du tableau, pas son contenu !
Tu peux utiliser Arrays.toString pour faire l'affichage.

System.out.println(java.util.Arrays.toString(s));
La confiance n'exclut pas le contrôle
0
Merci beaucoup. J'ai aussi eu un coup de pouce d'un ami ^^

System.out.println("s[0] = " + s[0] + " et s[1] = " + s[1]);
System.out.println(java.util.Arrays.toString(s));

Les 2 fonctionnes. En fait les string ces facile mais ces l'écriture que je n'arrive pas..
La valeur du tableau est donné en héxadécimal? De plus ces une valeur par défaut ou..?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 févr. 2013 à 21:06
"La valeur du tableau est donné en héxadécimal? De plus ces une valeur par défaut ou..?"
De quoi tu parles ?
0
public static void main(String[] args)
{
String temp;
String[] s ={new String("a"), new String("b")};
temp = new String("a");
s[0] = s[1];
s[1] = temp;

System.out.print("le string est" +s);
}
-> j'obtiens: [Ljava.lang.String;4@aa0560e

Que signifie cette phrase? Je pense pas que se soit utile mais sa pourrait bien me servir plus tard..
Autant le comprendre maintenant ^^


De plus pour celui ci je dois utiliser une autre phrase pour obtenir la valeur. J'aurais que que le arrays serait bon

String s = "";
for (int i = 0 ; i < 26 ; i ++ ) s = s + (char)('a'+ i) ;

//System.out.println("s[0] = " + s[0] + " et s[1] = " + s[1]);
//System.out.println(java.util.Arrays.toString(s));
System.out.println("valeur tab: "+s);
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 févr. 2013 à 21:25
Quand tu fais l'affichage d'un objet il est automatiquement converti en String, c'est alors la méthode toString de cet objet qui est utilisé.
En général cette méthode est redéfinie pour être plus compréhensible, mais ce n'est pas le cas pour les tableaux. En conséquence c'est la méthode toString de la classe Object qui est utilisé.

Elle se décompose de la sorte :

getClass().getName() + '@' + Integer.toHexString(hashCode())

La première partie est assez évidente il s'agit du nom de la classe. La particularité des tableaux c'est que leur nom commence par un [
Ensuite si c'est un objet on aura un L et le nom de la classe de l'objet, comme java.lang.String
Si c'est un type primitif en revanche on a C pour un char, I pour un int, D pour un double, etc.

La deuxième partie, c'est effectivement de l'hexadécimal, ça correspond au hashCode de l'objet, quand ça n'a jamais été modifié (c'est le cas pour les tableaux) ça correspond au hashCode de la référence de l'objet...
0
En tout cas merci tu me sors une épine du pied.
A la prochaine j'aurais surement encore plein d'autre question ^^
0