Tableaux en Java
Résolu
talbsbast
Messages postés
53
Date d'inscription
Statut
Membre
Dernière intervention
-
talbsbast Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
talbsbast Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
bonjour,
j'ai une fonction qui a comme paramètres deux tableaux. La fonction modifie le contenue de ces deux tableau, mais quand je sort de la fonction et je fais l'affichage des deux tableaux il m'affiche l'ancien contenue, je ne comprend pas pourquoi ??
alors que quand je fait l'affichage dans la fonction concernée il m'affiche que mon tableau a bien été modifié !
normalement les tableaux sont des pointeurs du coups la modification reste même après avoir sorti de la fonction!
si vous voulez plus de détails voila la fonction : et le tableau concerné c'est 'a'
Merci pour vous réponses ^^..
j'ai une fonction qui a comme paramètres deux tableaux. La fonction modifie le contenue de ces deux tableau, mais quand je sort de la fonction et je fais l'affichage des deux tableaux il m'affiche l'ancien contenue, je ne comprend pas pourquoi ??
alors que quand je fait l'affichage dans la fonction concernée il m'affiche que mon tableau a bien été modifié !
normalement les tableaux sont des pointeurs du coups la modification reste même après avoir sorti de la fonction!
si vous voulez plus de détails voila la fonction : et le tableau concerné c'est 'a'
// renvoie le quotient a/b et attribue à a le reste de la division static short[] LDiv(short[] a, short[] b){ short[] q = {0}; short[] b0 = new short[1]; short[] un = {1}; int i, k; for(i = 0; i < a.length; i++){ b0 = DecalL(b, i); if(Compare(a, b0) == 1){ DecalR(b0, 1); break; } } k = i; while(k >= 0){ if(Compare(b0, a) > -1){ a = LSous(a, b0); q = LAdd(q, DecalL(un, k)); } k--; if(k>= 0) b0 = DecalL(b, k); } afficher(a, "a"); return q; }
Merci pour vous réponses ^^..
A voir également:
- Tableaux en Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
"normalement les tableaux sont des pointeurs"
Il n'y a pas de pointeurs en Java, uniquement des références vers des objets (un tableau est un objet), mais lors d'un appel d'une méthode la référence est passée par valeur ! Donc si tu modifies la variable dans la méthode en lui affectant une nouvelle valeur, ça ne modifieras pas l'objet, juste la référence à cet objet. En dehors de la méthode la référence vers l'objet initial est conservée.
Donc
Une manière (moche) de faire, serait de passer en paramètre un tableau
Exemple :
Cependant Java est un langage objet, il n'est pas fait pour ce genre de codes !
En conception objet, tu passerais à ta méthode un objet de classe Param qui retournerais un objet de la classe Result (par exemple), et sans modifier la référence à l'objet Param tu pourrais en modifier sa valeur au travers de ses méthodes.
Exemple :
Il n'y a pas de pointeurs en Java, uniquement des références vers des objets (un tableau est un objet), mais lors d'un appel d'une méthode la référence est passée par valeur ! Donc si tu modifies la variable dans la méthode en lui affectant une nouvelle valeur, ça ne modifieras pas l'objet, juste la référence à cet objet. En dehors de la méthode la référence vers l'objet initial est conservée.
Donc
a = LSous(a, b0);modifieras uniquement la valeur de la variable
apour lui affecter la référence à un autre objet. Mais en dehors de la méthode la référence à l'objet initial est conservée.
Une manière (moche) de faire, serait de passer en paramètre un tableau
short[][] aboù
short[0]serait
aet
short[1]serait
b. Tu ne pourras pas changer la référence sur
abpar contre tu pourras modifier l'objet et les références
ab[0]et
ab[1].
Exemple :
short[] a = ...; short[] b = ...; short[][] ab = { a, b }; short[] q = LDiv(a,b); a = ab[0]; b = ab[1];
Cependant Java est un langage objet, il n'est pas fait pour ce genre de codes !
En conception objet, tu passerais à ta méthode un objet de classe Param qui retournerais un objet de la classe Result (par exemple), et sans modifier la référence à l'objet Param tu pourrais en modifier sa valeur au travers de ses méthodes.
Exemple :
short[] a = ...; short[] b = ...; Param p = new Param(a,b); Result r = LDiv(p); a = p.getA(); b = p.getB();