Problème avec un tableau de tableaux à 2 dimensions

cs_Gougoul Messages postés 6 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 28 septembre 2005 - 4 sept. 2005 à 10:54
cs_Gougoul Messages postés 6 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 28 septembre 2005 - 28 sept. 2005 à 10:31
Bonjour,

j'expose mon cas:

Je crée un tableau(A) qui doit recevoir comme élément un tableau(B) à deux dimensions.

à chaque itération, le tableau A reçoit bien le tableau B ( A.length()
augmente bien à chaque fois), Le dernier élément du tableau
A est bien le contenu du tableau B.

Le tableau A doit me servir de mémoire de l'évolution du tableau B et
le problème que je rencontre est que tous les éléments du tableau A
prennent le contenu du dernier élément entré.

voici le code utilisé:

1)function fA(stockage,i){

/*i est incrémenté depuis la fonction appelante et stockage prend la valeur de B*/




2) A[i]=stockage;




3)}




4)




5)if(!A){




6) A=new Array(); //




7)A[0]=B;




8)}



J'utilise FlashMX .

Si quelqu'un voit ce qui cause mon problème ou connait la cause du
problème, les suggestions et les solutions sont la bien venues.

si mon exposé n'est pas clair, n'hésitez pas à demander des éclaircissements.

merci d'avance.

6 réponses

Crazyx Messages postés 128 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 15 octobre 2008
6 sept. 2005 à 10:37
J'ai pas bien saisi ce que tu tente de faire, surement parce que je suis débutant. Mais bon puisque personne ne répond a ce post, je me lance dans une tentative suicide :p


Tout ce que j'ai compris, c'est que tu tente de sauvegarder le contenu du TABLEAU B dans un TABLEAU A , afin de suivre la dernière modification effectué. Si c'est bien ca ce que tu souhaite faire, je crois que tu te complique la tache. Je pense, de mémoire sans être vraiment sur, que si que B est un tableau et que tu fais A = B; flash crée un tableau A exactement pareil que B. Il te suffit donc de mettre ca au début de ta fonction qui appelle la modification de B, pour avoir A qui correspond à l'etat précédent de B.

Si ce n'est pas cela que tu souhaite, expose un peu plus ton problème peut être que je pourrai t'aider.

crazYx
0
cs_Gougoul Messages postés 6 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 28 septembre 2005
7 sept. 2005 à 10:27
Bonjour crazYx,

J'ai compris d'où venait le problème(sans pouvoir le résoudre)

je vais essayer de t'expliquer un peu mieux la situation.

B est un tableau de tableaux (une matrice) qui au fur et à mesure de
l'avancement du programme va se voir modifier l'un de ses éléments.

A la fin du programme je veux pouvoir repasser en revue toute les
modifications, donc je crée un tableau A[i] qui va recevoir le tableau
B à chacune de ses modifications, l'indice i est évidement
incrémenté à chaque fois.

lorsque je fais A[i] = B , ce ne sont pas des valeurs de B qui sont
transmises à A mais des réfèrences ce qui fait que le tableau A ne
contient que des références et sera toujours égal au dernier état de
B==> donc plus aucune trace des états précédents.

ex: tu peux le tester dans flash

//DEBUT

L1=new Array("fruit","légume","etc...");

L2=new Array("rien","rien","rien");

tMatrice=new Array(L1,L2);



tRecepteur= new Array();

//tRecepteur reçoit l'état initial de tMatrice à son 1er élément

tRecepteur[0]= tMatrice; //

trace("j'affiche le contenu de tRecepteur indice 0 ==> "+tRecepteur[0]);

//je modifie le contenu de tMatrice (1ere modification)

tMatrice[0][0]="rien";

tMatrice[1][0]="fruit";

//je vérifie le changement dans tMatrice

trace("tMatrice après changement => "+tMatrice);

//et je constate les "dégats" dans tRecepteur

trace("j'affiche tRecepteur sans changement => "+tRecepteur);

//malgré le changement uniquement dans tMatrice, tRécepteur est affecté

//aussi

//tRecepteur reçoit l'état de tMatrice après changement à son 2eme élément

tRecepteur[1]=tMatrice;

//

trace("tRecepteur[0] => "+tRecepteur[0]);

trace("tRecepteur[1] => "+tRecepteur[1]);

//tRecepteur[0] = tRecepteur[1]

//FIN

Dans cet exemple tRecepteur reste toujours égal à tMatrice même si l'indice de tRecepteur change.

Le problème est là, comment faire pour modifier tMatrice sans affecter
tRecepteur ou comment transmettre par valeur et pas par référence?

Est-ce que cela semble plus clair?

cordialement
0
Crazyx Messages postés 128 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 15 octobre 2008
8 sept. 2005 à 11:21
C'est pense que c'est plus clair j'ai lu en diagonale pour l'instant je lance flash je regarde et je te dis si je vois une issue a ce problème ...
A tout de suite

cx
0
Crazyx Messages postés 128 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 15 octobre 2008
8 sept. 2005 à 13:10
J'avoue que c'es du bidouillage ce que j'ai fait , mais en fait tu créer un tableau a deux dimensions qui contient un tableau a deux dimensions et donc a partir de la ca dreraille au niveau des appels et des attributions de valeurs qui se mettent en "colonnes" au lieu de ce mettre en " ligne" donc en fait pour ton exemple la solution (bidouillage, bidouillage) que j'ai trouvé pour que ca marche c'est ca :


//DEBUT
L1=new Array("fruit","légume","etc...");
L2=new Array("rien","rien","rien");
tMatrice=new Array(L1,L2);


tRecepteur= new Array();
//tRecepteur reçoit l'état initial de tMatrice à son 1er élément
tRecepteur[0]= tMatrice[0] + "," + tMatrice[1];//
trace("j'affiche le contenu de tRecepteur indice 0 ==> "+tRecepteur[0]);
//je modifie le contenu de tMatrice (1ere modification)
tMatrice[0][0]="rien";
tMatrice[1][0]="banane";
//je vérifie le changement dans tMatrice
trace("tMatrice après changement => "+tMatrice);
//et je constate les "dégats" dans tRecepteur
trace("j'affiche tRecepteur sans changement => "+tRecepteur);

//FIN


cx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Crazyx Messages postés 128 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 15 octobre 2008
8 sept. 2005 à 14:09
Je corrige, en fait les valeurs des tableaux se mettent en ligne et pas en colonne
donc essaie et la ca marche... si tu veux envoie moi ton code en entier je te corrige ca ...

crazYx
0
cs_Gougoul Messages postés 6 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 28 septembre 2005
28 sept. 2005 à 10:31
bonjour crazyx,

J'ai laissé le sujet un petit peu de côté, et j'y revient avec la solution.

J'ai fini par trouver la méthode qui permet de passer des arguments par
valeurs et non plus par références, ce qui causait mon problème.

la méthode à utiliser est slice().

je donne cette fois-ci un exemple avec des tableaux simples (les
tableaux à deux dimmensions compliquaient la situation), et tu
comprendra où était mon problème.



//DEBUT

t_tableau = new Array(1,2,3);

trace(t_tableau);

t_tableau_bis = t_tableau;

trace("=====================");

trace("t_tableau = "+t_tableau);

trace("t_tableau_bis = "+t_tableau_bis);

trace("=====================");

trace("En modifiant un élément de t_tableau, t_tableau_bis");

trace("est modifié aussi");

trace("t_tableau[1] = 5;");



t_tableau[1] = 5;



trace("t_tableau = "+t_tableau);

trace("t_tableau_bis = "+t_tableau_bis); // le problème se situe là

trace("=====================");

trace("grâce à slice(), je peux faire passer les valeurs ");

trace("d'un tableau sans utiliser les références");



t_tableau_ter = t_tableau.slice(0);



trace("je modifie un élément de t_tableau et t_tableau_ter");

trace("n'est plus modifié");

trace("t_tableau[1] = 10;");



t_tableau[1] = 10;



trace("t_tableau = "+t_tableau);

trace("t_tableau_ter = "+t_tableau_ter); //le problème est résolu

//FIN



encore merci pour l'intérêt que tu m'as porté .
0
Rejoignez-nous