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] + " ");

}
Author: Taher Khorshidi, 2015-02-04

4 answers

Il y a 2 problèmes avec votre code:

  • - vous vérifier si lottery[i] et randomNum sont les mêmes, il convient de lottery[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] + " ");

}
 7
Author: Florent Bayle, 2015-02-04 12:54:44

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));
 7
Author: Peter Lawrey, 2015-02-04 13:08:36

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+" ");

    }
 1
Author: marcS, 2015-02-04 13:02:59

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));
        }
}
 0
Author: James Wright, 2016-05-18 13:30:21