Projet loto

Fermé
TokTokos - Modifié le 15 oct. 2020 à 19:35
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 15 oct. 2020 à 20:12
Bonjour, j'ai un problème avec mon programme sur un jeu loto, ou l'utilisateur doit entrer autant de nombres qu'il souhaite dans la console et par la suite, il doit y avoir un tirage de nombres aléatoires (si l'utilisateur a entré 6 nombres dans la console alors il y aura 6 nombres aléatoires et les nombres ne doivent pas se répéter.

Mon code compile sans soucis cependant il m'affiche ceci :

Numéros du joueur : []
Numéros du tirage : []
Nombre de bons numéros : 0
***** JACKPOT *****


et le code et le suivant :
import java.util.Arrays;

public class Loto {

    public static void main(String[] args){

        int nbChoisis[] = new int[args.length]; //tableau contenant les nombres utilisés par l'utilisateur
        int nbLoto[] = new int[args.length]; //tableau contenant les numéros tirés au sort
        //int nbLoto[] = {1,2,3,4,5}; //Tableau pour tester le jackpot
        
        for (int a = 0; a < nbChoisis.length; a++){ // on remplit les deux tableaux

            try { // on vérifie que l'utilisateur a bien rentré des entiers

                nbChoisis[a] = Integer.parseInt(args[a]); // si tout vas bien on remplit le tableau nbChoisis avec les données que l'utilisateur a inséré

            } catch (NumberFormatException e) {

                break; // si on a une erreur c'est donc que l'utilisateur n'a pas entré seulement des entiers, on sort donc de la boucle et on affiche le message d'erreur situé à la fin du programme

            }

            nbLoto[a] = (int)(Math.random()*49+1); // la méthode random donne un chiffre qui est entre 0 et 1 donc on le multiplie par 49 pour avoir un nombre entre 0 et 49 et ensuite on l'additionne à 1 pour avoir un nombre entre 1 et 50. De plus on le force à être un entier 

        }

        int nbEgal = 0; // on definie une variable pour vérifier que tout les nombres entrés par l'utilisateur sont differents

        for (int n = 0; n < nbChoisis.length; n++){ // on vérifie que toutes les valeurs entrées par l'utilisateur sont différentes

            for (int m = 0; m < nbChoisis.length; m++){

                if (nbChoisis[n] == nbChoisis[m]){

                    nbEgal = nbEgal + 1;

                }

            }

        }

        int nbCorrect = 0; // on définit une variable qui nous permettera de voir si les chiffres entrés par l'utilisateur sont contenus dans l'intervalle 0 , 50

        for (int i = 0; i < nbChoisis.length; i++){

            if (nbChoisis[i] > 0 && nbChoisis[i] <= 50){

                nbCorrect = nbCorrect + 1; // Si le numéros est contenu dans l'intervalle on incrémente nbCorrect

            }

        }

        if (nbCorrect == nbChoisis.length && nbChoisis.length <= 5 && nbEgal == 0) { // On vérifie que tout les nombres sont contenus dans l'intervalle et que l'utilisateur a entré maximum 5 numéros

            int nbGagnants = 0; // On défini une variable nous permettant de compter le nombre de numéros gagnants

            for (int x = 0; x < nbChoisis.length; x++){

                for (int y = 0; y < nbChoisis.length; y++){

                    if (nbChoisis[x] == nbLoto[y]){

                        nbGagnants = nbGagnants + 1; // on incrémente la variable nbGagnants si le numéro est gagnants

                    }

                }

            }

            boolean jackpot = false; // On déclare un boolean Jackpot pour savoir si l'utilisateur a eu e jackpot ou non on l'initialise à non

            if (nbGagnants == nbChoisis.length){ // on vérifie si la variables nbGagnants et égale au nombre total de numéros entrés par l'utilisateur

                jackpot = true; // si oui on dit que jackpot est true

            }

            // on trie les tableaux
            Arrays.sort(nbChoisis);
            Arrays.sort(nbLoto);

            // on affiche les différentes informations
            System.out.println("Numéros du joueur : " + Arrays.toString(nbChoisis));
            System.out.println("Numéros du tirage : " + Arrays.toString(nbLoto));
            System.out.println("Nombre de bons numéros : " + nbGagnants);

            if (jackpot == true){ // si l'utilisateur a le jackpot on affiche le message suivant

                System.out.println("***** JACKPOT *****");

            }

        } else {

            //si l'utilisateur entre des chiffres qui ne correspondent pas à l'intervalle 0 , 50 ou si l'utilisateur a entré plus de 5 chiffres on affiche ce message d'erreur
            System.out.println("Vous devez entrer des nombres entiers entre 0 et 50 et maximum 5 numéros différents.");

        }

    }

}

ps : je suis nouveau dans le java donc je n'arrive pas à résoudre ce problème.

Si quelqu'un peut m'aider ce serait génial.

Merci d'avance

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 oct. 2020 à 20:12
Bonjour,

L'affichage que tu obtiens est lié au fait que args est vide, il n'y a aucun nombre saisi par l'utilisateur, c'est une vérification que tu devrais faire dès le début du programme.

Pour remplir les valeurs dans args tu peux faire comme ceci :
java Loto 1 2 3 4 5

Evidemment tu as d'autres erreurs ensuite.

Voici un exemple pour le début du programme, où tu dois contrôler les données saisies par l'utilisateur :
public class Loto {

   private static final int NOMBRE_MIN_VALEURS = 1;
   private static final int NOMBRE_MAX_VALEURS = 5;
   private static final int VALEUR_MIN = 1;
   private static final int VALEUR_MAX = 50;

   private static final String ERREUR_SAISIE = String.format("Vous devez saisir entre %d et %d nombres entiers, tous différents, compris entre %d et %d.",
         NOMBRE_MIN_VALEURS, NOMBRE_MAX_VALEURS, VALEUR_MIN, VALEUR_MAX);

   public static void main(String[] args) {
      final int nombreValeursChoisies = args.length;

      if (nombreValeursChoisies < NOMBRE_MIN_VALEURS || nombreValeursChoisies > NOMBRE_MAX_VALEURS) {
         System.err.println(ERREUR_SAISIE);
         System.err.println("Erreur : " + nombreValeursChoisies + " valeurs saisies !");
         return;
      }

      int[] valeursChoisies = new int[nombreValeursChoisies];
      for (int i = 0; i < nombreValeursChoisies; i++) {
         int valeurChoisie;
         try {
            valeurChoisie = Integer.parseInt(args[i]);
         } catch (Exception exception) {
            System.err.println(ERREUR_SAISIE);
            System.err.println("Erreur : " + args[i] + " n'est pas un nombre entier");
            return;
         }
         if (valeurChoisie < VALEUR_MIN || valeurChoisie > VALEUR_MAX) {
            System.err.println(ERREUR_SAISIE);
            System.err.println("Erreur : " + valeurChoisie + " n'est pas valide");
            return;
         }
         for (int j = 0; j < i; j++) {
            if (valeursChoisies[j] == valeurChoisie) {
               System.err.println(ERREUR_SAISIE);
               System.err.println("Erreur : " + valeurChoisie + " est saisi plusieurs fois");
               return;
            }
         }
         valeursChoisies[i] = valeurChoisie;
      }

      // une fois que tout est vérifié tu peux commencer le programme
   }
}
0