[Java] Comment faire des nombres aléatoires ( URGENT ) !

Comment faire des nombres aléatoires ( URGENT ) ! [Java] - Programmation

Marsh Posté le 15-06-2001 à 00:02:32    

bon voila, comment mélanger des nombres de 0 à 15 aléatoirement sans prendre deux fois le même ????

Reply

Marsh Posté le 15-06-2001 à 00:02:32   

Reply

Marsh Posté le 15-06-2001 à 00:57:50    

Il faut d'abord utiliser la classe java.util.Random pour générer des nombres aléatoires. Puis ensuite, l'algorithme suivant devrait suffire :

  • Tu crées un tableau t à 16 entrées tel que t[i]=i.
  • Pour chaque i parcourant t: tu tires un nombre aléatoire n compris entre 0 et 15 (inclus) et tu échanges t[i] et t[n].
  • Pour chaque i parcourant t: tu tires 2 nombres aléatoires n1 et n2 compris entre 0 et 15 (inclus) et tu échanges t[n1] et t[n2].

Reply

Marsh Posté le 15-06-2001 à 01:01:52    

Euh moi je ferais comme ca, c'est surement pas la meilleure solution mais ca marche (pour des valeurs de 0 à 15, apres si tu tu fais ca pour beaucoup plus de valeurs ca marche pas au top).
 
poru avoir un tableau de valeurs de 0 à 15 sans repetition t'as qua faire:
int [] monTableau=melange(0,15);
 
-----------------------------------------------------------------
static int randomInt (int a,int b) //renvoie un int entre a et b inclus
{ double random1=Math.random();
 int temp=(int)((Math.abs((a-b-1))*random1)+a);
 return(temp);
}
 
static int [] melange(int a,int b)
{ /** initialisation variables **/
 int [] tableResultat=new int[Math.abs((a-b))+1];
 boolean [] tableTest=new boolean [Math.abs((a-b))+1]; // tableau permettant de ne pas repeter un nombre
 for(int i=0;i<tableTest.length;i++)
 { tableTest[i]=false;
 }
 boolean ecrit;
 
 /** construction du tableau final **/
 for(int i=0;i<tableResultat.length;i++)
 { do{
  ecrit=false;
  int valeurHasard=randomInt(a,b);
  if(tableTest[valeurHasard]==false)// si la valeur n'est pas deja dans le tableau resultat
   { tableResultat[i]=valeurHasard;
    tableTest[valeurHasard]=true;
    ecrit=true;
   }
  }while(ecrit==false);
 }
 return tableResultat;
}
-----------------------------------------------------------------

Reply

Marsh Posté le 15-06-2001 à 01:05:12    

oops un peu trop tard, la solution de Biface à l'air meilleure que la mienne...

Reply

Marsh Posté le 15-06-2001 à 01:08:59    

bouyouman> Comme tu tires plusieurs nombres aléatoires, il est préférable de faire :

Code :
  1. Random  randomGenerator = new Random();


 
puis, pour tirer un nombre aléatoire entre 0 et 15 (inclus) :

Code :
  1. randomGenerator.nextInt(16);


 
Appeler Math.random() recrée un objet Random à chaque appel, c'est un peu bête (et aussi plus coûteux).

Reply

Marsh Posté le 15-06-2001 à 09:40:21    

Merci à vous,
 
j'avais deja testé une solution équivalente à la tienne bouyouman mais ca fait ramer mon pc à mort et planter le process. Donc j'ai essayer la solution de BifaceMcLeOD qui tourne vraiment bien...
 
merci je vais pouvoir finir mon jeu en Java.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed