cs_rorette
Messages postés5Date d'inscriptionmardi 17 mars 2009StatutMembreDernière intervention 6 juillet 2009
-
19 juin 2009 à 10:47
cs_rorette
Messages postés5Date d'inscriptionmardi 17 mars 2009StatutMembreDerniè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?
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 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)
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 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.
cs_rorette
Messages postés5Date d'inscriptionmardi 17 mars 2009StatutMembreDerniè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]);
}
cs_rorette
Messages postés5Date d'inscriptionmardi 17 mars 2009StatutMembreDerniè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...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
//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...
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 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] + " ");
}
cs_rorette
Messages postés5Date d'inscriptionmardi 17 mars 2009StatutMembreDerniè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.