Utilisation de la procédure en java

Résolu
Odenelle Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   -  
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour a tous,

Je suis actuellement novice en java et je commence mes premiers programmes. J'ai un soucis au niveau de la procédure, je souhaite renverser un tableau et j'ai donc écris la procédure suivante qui me semble être valide :

public static void renverser(int [] T, int taille_T) {

int i,tmp;

for (i=0; i<=(taille_T)/2; i++)

{
tmp = T[i];
T[i] = T[taille_T-1-i];
T[taille_T-1-i] = tmp;
}
}

Dans le programme principal, je l'ai utilisée comme ceci :

renverser(Tab_entier,tailletableau);

System.out.println("Voici votre tableau renversé a l'aide d'une procédure :"
+Tab_entier);

Aucun soucis dans l'algorithme selon netbeans, seulement le résultat quand je lance mon programme est pour le moins étonnant, mon tableau que j'avais déclaré comme ceci :

int [] Tab_entier = {1,2,3,4,5,6,7,8,9,10}

Devient :

Voici votre tableau renversé a l'aide d'une procédure :[I@56f9659d

Je ne comprends absolument pas cette erreur, quelqu'un saurait-il m'éclairer ? Merci d'avance.






A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ce n'est pas une erreur ^^

Ce que tu affiches est bien la valeur de Tab_entier, mais ce que toi tu veux faire c'est afficher les cases du tableau, c'est à dire les Tab_entier[i].
Tu dois donc faire une boucle et afficher une à une les cases du tableau...

Remarque : si ça affiche toujours 1,2,3,4,5,6,7,8,9,10 ce ne sera pas non plus une erreur d'affichage, c'est juste que ta méthode renverser ne marche pas comme tu veux ;-)
2
Odenelle Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   20
 
Merci bien :) , je vais donc faire cette boucle.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Hello,

Au passage si Tab_entier n'est pas commun aux deux fonctions, alors ton tableau n'en sera pas plus inversé.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Et bien j'ai testé son code hier, et étonnamment ça fonctionne !
Je pensais à priori qu'avec le passage par référence, le tableau allait être copié et modifié uniquement à l'intérieur de la fonction et qu'ensuite dans le main on aurait encore le tableau original, mais que nenni, l'inversion se fait très bien...

public static void renverser(int [] T, int taille_T)
{
	int i,tmp;

	for (i=0; i<=(taille_T)/2; i++)
	{
		tmp = T[i];
		T[i] = T[taille_T-1-i];
		T[taille_T-1-i] = tmp;
	}
}

public static void afficher(int[] T)
{
	for (int i : T)
		System.out.printf("%d ", i);
	System.out.println();
}
	
public static void main (String...args)
{
	int [] Tab_entier = {1,2,3,4,5,6,7,8,9,10};	
	afficher(Tab_entier);	
	renverser(Tab_entier,Tab_entier.length);	
	afficher(Tab_entier);	
}
0
Odenelle Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   20
 
Oui ce code fonctionne :) , il n'est surement pas le plus simple pour renverser un tableau mais il devenait carrément inutile si on ne sait pas afficher le tableau renversé ! Par contre je n'ai pas crée de nouvelle procédure pour l'affichage j'ai uniquement travaillé dans le programme principal comme ceci :

renverser(Tab_entier,tailletableau);
int i;
System.out.print("Voici votre tableau renversé a l'aide d'une procédure : ");
System.out.print("{ ");
for (i=0; i<tailletableau-1; i++)
{
System.out.print(Tab_entier[i]+", ");
}
i=tailletableau-1;
System.out.print(+Tab_entier[i]+" }");
renverser(Tab_entier,tailletableau);

Avec la procédure renverser postée dans mon message d'avant, et bien sur le tableau et sa taille initialisé auparavant..
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"je n'ai pas crée de nouvelle procédure pour l'affichage" si tu ne fais qu'un seul affichage ça se justifie, moi j'en ai fait deux alors tout de suite je pense à faire une petite méthode, mais ça ne va pas changer grand chose...

"il n'est surement pas le plus simple pour renverser un tableau", je vois difficilement comment faire mieux ! Après on peut toujours chipoter sur l'utilité de taille_T, sur l'intérêt du <= alors que < devrait suffire, ou bien améliorer la gestion des indices de sorte à ne pas calculer taille_T-1-i à deux reprises à chaque fois, mais c'est de l'optimisation, l'algorithme de base reste le même ;-)

public static void renverser(int[] T)  
{  
    for (int i=0, j=T.length-1, tmp; i<j; i++, j--)  
    {  
        tmp = T[i];  
        T[i] = T[j];  
        T[j] = tmp;  
    }  
}
0
Odenelle Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   20
 
Il est vrai :), merci en tout cas pour ton aide KX
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Etrange, ça ne marche pas avec les autres objets ....

Enfin j'ai tenté de modifier une String par la même méthode, pas possible.
0