Fonction Random() nombre répété
Résolu
yasamira
Messages postés
18
Statut
Membre
-
yasamira Messages postés 18 Statut Membre -
yasamira Messages postés 18 Statut Membre -
Bonjour,
j'ai un programme en java dont une partie fait appel au fonction Random qui génère des nombres aléatoires de 1 à 4, mon premier problème c'était : chaque nombre de random doit etre répété n fois; ce problème à été résolu par un membre comme suit
mon 2éme problème c'est lorsque random répète un nombre n fois exactement, elle termine la génération des nombres par les autres valeurs qui restent
par exemple :(je prends juste 2 valeurs)
1 doit se répéter 10 fois
2 doit se répéter 20 fois
voila l'affichage
1 2 2 2 1 1 2 2 1 2
1 2 1 2 1 1 2 1 1 2
2 2 2 2 2 2 2 2 2 2 >>> (pas de 1 puisqu'il est répété 10 fois)
mais mon objectif c'est de faire répéter les valeurs et de les trouver partout. Voici le résultat de mon problème (le vert c'est le nombre 2 qui est supérieur à 1)

j'ai un programme en java dont une partie fait appel au fonction Random qui génère des nombres aléatoires de 1 à 4, mon premier problème c'était : chaque nombre de random doit etre répété n fois; ce problème à été résolu par un membre comme suit
import java.util.Random;
public class Main1
{
// des variable de controle
static int limit_1 = 15, limit_2 = 20, limit_3 = 30, limit_4 = 35;
static int nbr_1, nbr_2, nbr_3, nbr_4;
static int[][] grille = new int[10][10];
static Random rand = new Random();
static int r;
public static void main(String args[])
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
// Controle de l'atteinte de limite
boolean limit = true;
while (limit)
{
// générer le nombre aléatoire avec Random
r = genererNbr();
limit = controlLimit(r, limit);
}
grille[i][j] = r;
}
}
int control_1 = 0;
int control_2 = 0;
int control_3 = 0;
int control_4 = 0;
// Affichage de la grille
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
// Compteur de répétition
if (grille[i][j] == 1)
control_1++;
else if (grille[i][j] == 2)
control_2++;
else if (grille[i][j] == 3)
control_3++;
else if (grille[i][j] == 4)
control_4++;
System.out.print(grille[i][j] + " ");
}
System.out.println();
}
System.out.println();
// Vérification de nombre de répétition
System.out.println("Nombre de 1: " + control_1);
System.out.println("Nombre de 2: " + control_2);
System.out.println("Nombre de 3: " + control_3);
System.out.println("Nombre de 4: " + control_4);
}
static int genererNbr()
{
r = rand.nextInt(4) + 1;
return r;
}
static boolean controlLimit(int nbr, boolean limit)
{
switch (nbr)
{
case 1:
if (nbr_1 < limit_1)
{
nbr_1++;
limit = false;
} else
limit = true;
break;
case 2:
if (nbr_2 < limit_2)
{
nbr_2++;
limit = false;
} else
limit = true;
break;
case 3:
if (nbr_3 < limit_3)
{
nbr_3++;
limit = false;
} else
limit = true;
break;
case 4:
if (nbr_4 < limit_4)
{
nbr_4++;
limit = false;
} else
limit = true;
break;
}
return limit;
}
}
mon 2éme problème c'est lorsque random répète un nombre n fois exactement, elle termine la génération des nombres par les autres valeurs qui restent
par exemple :(je prends juste 2 valeurs)
1 doit se répéter 10 fois
2 doit se répéter 20 fois
voila l'affichage
1 2 2 2 1 1 2 2 1 2
1 2 1 2 1 1 2 1 1 2
2 2 2 2 2 2 2 2 2 2 >>> (pas de 1 puisqu'il est répété 10 fois)
mais mon objectif c'est de faire répéter les valeurs et de les trouver partout. Voici le résultat de mon problème (le vert c'est le nombre 2 qui est supérieur à 1)

A voir également:
- Fonction Random() nombre répété
- Fonction si et - Guide
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Fonction miroir - Guide
- Ascii nombre de caractères - Guide
3 réponses
Bonjour,
J'ai l'impression que tu cherches à avoir un genre de distribution Gaussienne, avec par exemple 10 fois la valeur 1 mais répartie un peu partout de façon homogène sur ta grille.
C'est bien ça ?
A+
J'ai l'impression que tu cherches à avoir un genre de distribution Gaussienne, avec par exemple 10 fois la valeur 1 mais répartie un peu partout de façon homogène sur ta grille.
C'est bien ça ?
A+
Bonsoir,
Pour reprendre l'idée de ProvencalLeGaulois tu pourrais te prendre une liste que tu remplis de la totalité des valeurs que tu veux. Il ne reste plus qu'à la mélanger (des méthodes existent déjà pour ça) et la transférer dans tes tableaux.
Pour reprendre l'idée de ProvencalLeGaulois tu pourrais te prendre une liste que tu remplis de la totalité des valeurs que tu veux. Il ne reste plus qu'à la mélanger (des méthodes existent déjà pour ça) et la transférer dans tes tableaux.
List<Integer> list = new ArrayList (n); ... Collections.shuffle(list); ...
Ce qui doit être aléatoire c'est la position du chiffre.
Vu que tu sais que tu aura n fois le nombre x, ça n'est pas la peine de faire un random sur la génération de ce nombre.
En revanche tu peux faire un random sur sa position dans la grille.
Donc mon idée c'est de dire, d'abord on place tous les 1 n'importe où, puis les 2, puis les 3, puis les 4.
Pour les placer n'importe où il te faut faire qqch du genre :
Idem pour les 2,3,4,..., n.
J'espère que ça pourra t'aider.
A+
Pour moi au final, et de façon plus générique ça donne :
Je pense que c'est ce qu'il te faut ;)
A+