Tableaux en Java

Résolu/Fermé
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 - Modifié par jipicy le 9/02/2014 à 15:10
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 - 9 févr. 2014 à 15:37
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'

 // 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:

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
9 févr. 2014 à 15:17
"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
a = LSous(a, b0);
modifieras uniquement la valeur de la variable
a
pour 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[][] ab
short[0]
serait
a
et
short[1]
serait
b
. Tu ne pourras pas changer la référence sur
ab
par 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();
1
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 1
9 févr. 2014 à 15:37
Merci KX pour votre réponse ça m'a aidé ^^
0