Tableau

Résolu
cs_rorette Messages postés 5 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 6 juillet 2009 - 19 juin 2009 à 10:47
cs_rorette Messages postés 5 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 6 juillet 2009 - 19 juin 2009 à 17:31
Bonjour,

Je dispose d'un tableau 2 dimensions 8*8 rempli et je souhaiterais mélanger les valeurs. Existe-t-il une fonction "shuffle" pour faire cela? Si non, comment puis-je m'en sortir?

Merci de votre aide.

8 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
19 juin 2009 à 15:37
tu oublies juste de 'passer les lignes' : ton indice dans liste2.get(k+l) est incorrect. C'est liste2.get(k*8+l).

Tu n'es pas obligée de créer une nouvelle liste pour le shuffle car cette méthode travaille sur la liste passée en paramétre. Tu peux faire directement : Collections.shuffle(liste)
3
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
19 juin 2009 à 11:05
Salut,

il y a dans la classe java.util.Collections une méthode shuffle, tu peux mettre tes valeurs dans une seule liste, utiliser cette méthode et reconstruire ton tableau.
0
cs_rorette Messages postés 5 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 6 juillet 2009
19 juin 2009 à 14:44
Merci, cependant, je ne suis pas du tout familière avec les listes que je n'ai jamais rencontré. J'ai regardé la doc sur le site de sun, cependant, mon code ne fonctionne pas comme prévu. Le voici :

 List liste=new ArrayList();
// je mets les valeurs de mon tableau tab2 dans la liste :
for (int k=0;k<8;k++)
                 for(int l=0; l<8;l++)
                 {
                     liste.add((int)tab2[k][l]);
                 }

//je mélange
ArrayList liste2 = melanger(liste);

//je reconstruis mon tableau :
for (int k=0;k<8;k++)
                 for(int l=0; l<8;l++)
                 {
                     tab2[k][l]=(int) liste2.get(k+l);
                 }

Et voici ma fonction mélanger :

 public ArrayList melanger(List listeDepart){
     
     List nouvelle = new ArrayList(listeDepart);
     Collections.shuffle(nouvelle);
     return (ArrayList) nouvelle;
     }

Il y a surement une notion qui m'échappe...

Merci de votre aide.
0
cs_rorette Messages postés 5 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 6 juillet 2009
19 juin 2009 à 15:47
Merci, j'ai donc supprimer ma fonction melanger et mis comme vous l'aviez suggeré Collections.shuffle(liste). J'ai également modifier l'indice des lignes. Malgré tout, au début dans mon tableau, j'avais 16 fois la valeur 1, 16 fois la valeur 2 et 16 fois la valeur 3, après le mélange, le nombre de fois que ces valeurs apparaissent n'est plus le même ( là je n'ai plus que 14 fois la valeur 1 par exemple...)
0

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

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
19 juin 2009 à 16:23
hum bizarre. A priori je dirais que tu as oublié d'en compter. Par quoi sont remplacés les valeurs manquantes ?
Tu peux reposter ton code ?
0
cs_rorette Messages postés 5 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 6 juillet 2009
19 juin 2009 à 16:37
Voilà le code :

// je définis mon tableau (16 *1, 16 *2 et 32 *3)

for(int k=0;k<8;k++)
             for(int l=0;l<8;l++)
             {     if(i<16)
                 {
                     tab2[k][l]=1;
                     i++;
                 }
                 else if(j<16)
                 {
                     tab2[k][l]=2;
                     j++;
                 }
                 else { tab2[k][l]=3;}
             }

List liste=new ArrayList();

//je mets les valeurs dans la liste:
for (int k=0;k<8;k++)
                 for(int l=0; l<8;l++)
                 {   
                     liste.add((int)tab2[k][l]);
                 }
//mélange
Collections.shuffle(liste);

//je reconstruis le tableau:
for (int k=0;k<8;k++)
                 for(int l=0; l<8;l++)
                 {
                     tab2[k][l]=(int) liste.get(k*8+l);
                 }

Par exemple là je n'ai plus que 11 fois 2, mais j'ai 17 fois 1 (alors qu'à la base il y en a que 16...) et 36 fois 3 (alors qu'à la base il y en a 32).
Pourtant, quand je reconstruis mon tableau avec la liste non mélangée, je retrouve la même matrice qu'au départ...
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
19 juin 2009 à 16:49
j'ai exécuté ton code et je trouve 16 fois 1, 16 fois 2 et 32 fois 3.

j'ai modifié la dernière partie pour le décompte :
        int[] total = new int[3];
        // je reconstruis le tableau:
        for (int k = 0; k < 8; k++) {
            for (int l = 0; l < 8; l++) {
                tab2[k][l] = (int) liste.get(k * 8 + l);
                total[tab2[k][l] - 1]++;
            }
        }

        for (int k = 0; k < 3; k++) {
            System.out.print(total[k] + " ");
        }
0
cs_rorette Messages postés 5 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 6 juillet 2009
19 juin 2009 à 17:31
J'ai trouvé mon erreur, mon "List liste=new ArrayList();" n'était pas écrit au bon endroit. (En fait j'essaie de faire une petite applet, et au lieu de mettre cela dans public void paint(Graphics g) je l'avais mis directement en dessous de  "public class MonApplet extends Applet implements MouseListener{".
Je  vous remercie beaucoup de vous être occupé de mon soucis.

Aurore
0
Rejoignez-nous