Programme de Loterie Simple Java
J'ai essayé de créer un programme de loterie simple. Voici un problème: il imprime toujours les mêmes numéros. Par exemple, j'ai obtenu 33 21 8 29 21 10
en sortie. Chaque fois que le nombre aléatoire est généré, le code vérifie si ce nombre est déjà généré, puis il crée un nouveau nombre aléatoire mais après cela, il ne vérifie plus. Je ne pouvais pas trouver un moyen de le faire.
public static void main(String[] args)
{
int[] lottery = new int[6];
int randomNum;
for (int i = 0; i < 6; i++)
{
randomNum = (int) (Math.random() * 50); //Random number created here.
for (int x = 0; x < i; x++)
{
if (lottery[i] == randomNum) // Here, code checks if same random number generated before.
{
randomNum = (int) (Math.random() * 50);//If random number is same, another number generated.
}
}
lottery[i] = randomNum;
}
for (int i = 0; i < lottery.length; i++)
System.out.print(lottery[i] + " ");
}
4 answers
Il y a 2 problèmes avec votre code:
- - vous vérifier si
lottery[i]
etrandomNum
sont les mêmes, il convient delottery[x]
- lorsque vous générez à nouveau un nombre aléatoire, vous ne le comparez pas aux premiers nombres de
lottery
.
Voici une version corrigée:
public static void main(String[] args) {
int[] lottery = new int[6];
int randomNum;
for (int i = 0; i < 6; i++) {
randomNum = (int) (Math.random() * 50); // Random number created here.
for (int x = 0; x < i; x++) {
if (lottery[x] == randomNum) // Here, code checks if same random number generated before.
{
randomNum = (int) (Math.random() * 50);// If random number is same, another number generated.
x = -1; // restart the loop
}
}
lottery[i] = randomNum;
}
for (int i = 0; i < lottery.length; i++)
System.out.print(lottery[i] + " ");
}
Vous modifiez le nombre aléatoire pendant que vous le vérifiez. Vous devez choisir un nombre aléatoire et vérifier s'il est présent ou non.
BTW Une approche plus courte consiste à utiliser un shuffle.
// give me all the number 1 to 50
List<Integer> list = IntStream.range(1, 51).boxed().collect(Collectors.toList());
// shuffle them.
Collections.shuffle(list);
// give me the first 6
System.out.println(list.subList(0, 6));
Une solution simple, entre le premier (qui pourrait être très abstrait pour un programmeur non Java) et le 2ème (n'assurant pas l'unicité de la liste des nombres).
Collection<Integer> liste = new ArrayList<Integer>();
for (int i = 0; i < 6; i++)
{
Boolean ap = false;
while (!ap)
{
Integer randomNumber = (int) (Math.random() * 50);
if (! liste.contains(randomNumber)){
liste.add(randomNumber);
ap = true;
}
}
}
for (Integer liste1 : liste) {
System.out.print(liste1+" ");
}
Essayez celui-ci, il crée 12 x (6 sur 45)
public static void main(String[] args) {
SecureRandom random = new SecureRandom();
for (int i = 0; i < 12; i++){
Integer[] tipp = new Integer[6];
int n = 0;
do {
int r = random.nextInt(45) + 1;
if (Arrays.asList(tipp).indexOf(r)<0){
tipp[n]= r;
n++;
}
} while (n<=5);
Arrays.sort(tipp);
System.out.println(Arrays.toString(tipp));
}
}