Utilisation de la procédure en java

Résolu/Fermé
Odenelle Messages postés 102 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 - 19 nov. 2011 à 15:26
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 21 nov. 2011 à 12:22
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
19 nov. 2011 à 16:18
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 samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
19 nov. 2011 à 18:19
Merci bien :) , je vais donc faire cette boucle.
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
20 nov. 2011 à 13:39
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 nov. 2011 à 14:14
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 samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
20 nov. 2011 à 15:32
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 20/11/2011 à 16:11
"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 samedi 19 novembre 2011 Statut Membre Dernière intervention 18 mars 2016 20
20 nov. 2011 à 16:12
Il est vrai :), merci en tout cas pour ton aide KX
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
21 nov. 2011 à 01:47
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