IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

erreur structure boucle


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiante
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut erreur structure boucle
    Bonjour,

    le programme si dessous consiste à enregistrer les participants d'une course un à un pour ensuite afficher leur ordre d'arrivé (ordre d'enregistrement) il y a une erreur dans ma boucle, help please


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Course {
    public static void main(String[] args){
    int participants; 
     
    System.out.println (" Entrez un nombre de participants ");
    participants = Terminal.lireInt ();
     
    do { System.out.println (" ajouter un participant ");
      a = Terminal.lireInt();
     System.out.println (" ajouter un participant ");
      b = Terminal.lireInt ();
      System.out.println (" ajouter un participant ");
      c = Terminal.lireInt ();
      System.out.println (" ajouter un participant ");
      d = Terminal.lireInt ();
      System.out.println (" ajouter un participant ");
      e = Terminal.lireInt ();
     
    } while  (i = 0; i > participants ; i++);
    }
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    L'instruction while (pour un while, comme pour un do/while) est accompagnée d'une condition entre parenthèse. Là tu utilises la syntaxe d'un for (for(initialisation; condition; variation)).
    Je pense d'ailleurs que c'est plutôt un for que tu dois utiliser : on saisit un nombre, on veut répéter autant de fois que ce nombre l'exécution d'un code.
    Aussi, faut-il déclarer ses variables avant de pouvoir les utiliser (cela vaut pour i, mais aussi pour a, b, c, d et e).
    En revanche, tu fais une boucle, mais tu fais une séquence à l'intérieur pour faire 5 fois la même chose (quasiment) : il y a quelque chose en trop quelque part (la boucle ou la répétition). Evidemment, tu ne pourras pas faire de boucle et affecter 5 variables différentes sans faire un truc qui permet de choisir la bonne variable (un switch par exemple). Mais te restera le problème de pouvoir déclarer autant de variables que nécessaires pour le nombre de participants saisi, et çà, en Java, tu ne peux pas le faire. Il faut utiliser un tableau dans ce cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    System.out.println (" Entrez un nombre de participants ");
    int nombreParticipants = Terminal.lireInt (); // on demande la saisie du nombre de participants
     
    int[] participants = new int[nombreParticipants]; // on créé un tableau dont la taille est le nombre de particpants
    for(int i=0; i<nombreParticipants;    i++ ) { // on répète autant de fois qu'il y a de participants, en ayant un index de participants de 0 à nombre de participants exclus
         System.out.println (" ajouter un participant ");
         participants[i]=Terminal.lireInt(); // lire un nombre et le stocker dans le tableau, à la position i
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiante
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut suite programme
    Merci, ça marche !
    il y a t-il une méthode qui permet d'empêcher que l'utilisateur ajoute deux fois le même participant dans le tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    public class course2 {
      public static void main (String[]args){
        int nbParticipants, option;
     
        System.out.println (" Entrez un nombre de participants ");
    nbParticipants = Terminal.lireInt (); 
     
    int[] participants = new int[nbParticipants]; 
    for(int i=0; i<nbParticipants;    i++ ) { 
         System.out.println (" ajouter un participant ");
         participants[i]=Terminal.lireChar(); 
    }
     
    System.out.println ( " choisir une option ");
    System.out.println ( " 1. afficher la liste des participants ");
    System.out.println ( " 2. afficher le classement provisoire " );
    System.out.println ( " 3. enregistrer une arrivée " );
    System.out.println ( " 4. enregistrer un abandon "); 
    System.out.println  (" 5. enregistrer une disqualification ");
    System.out.println ( " 6. Quitter ");
     
    option =Terminal.lireInt ();
     
    if ( option == 1) { System.out.println (participants);
    }
     
    else { System.out.println (" work ");
      }
     
     
      }
    }
    De plus je n'arrive pas à afficher le tableau. Sachant qu'il s'agit d'une course dont l'ordre d'arrivée change selon les options ci-dessus, est-ce que je serais embêtée par la suite par le fait que je ne puisse pas modifier la taille du tableau ( l'exo m'interdit d'utiliser ArrayList ) ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Salut,
    Citation Envoyé par mrsdeath Voir le message
    il y a t-il une méthode qui permet d'empêcher que l'utilisateur ajoute deux fois le même participant dans le tableau ?
    Tu peut parcourir ton tableau et à chaque indice tu vérifies si l’élément != à celui que tu veux ajouter si oui tu ajoutes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i=0; i<participants.length;    i++ ) {
         System.out.println (" ajouter un participant ");
         if(participants[i] != Terminal.lireInt())
               participants[i]=Terminal.lireInt(); // lire un nombre et le stocker dans le tableau, à la position i
    }
    Citation Envoyé par mrsdeath Voir le message
    De plus je n'arrive pas à afficher le tableau
    Pour l'afficher tu le boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (option == 1){
         for(int i=0; i<participants.length;    i++ ) {
            System.out.println (participants[i]);
         }
    }
    Citation Envoyé par mrsdeath Voir le message
    Sachant qu'il s'agit d'une course dont l'ordre d'arrivée change selon les options ci-dessus est-ce que je serais embêtée par la suite par le fait que je ne puisse pas modifier la taille du tableau
    Pas du tout si ces options sont choisies parmi les participants puisque quelque soit alpha la somme de ces option <= nombre de participants.

    par exemple si ton tableau a été initialisé à 10(10 participants) tu peux avoir 3 abandons,2 disqualifiés et donc 5 arrivés et ton tableau a la capacité de tous les recevoir.

    Par contre si la façon dont on choisit une option n'a aucun rapport avec les participants c'est-à-dire qu'on peut choisir autant de fois une option que l'on désire,d'un moment à l'autre tu auras droit a une jolie exception qui te dira que le tableau est déjà rempli.

  5. #5
    Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiante
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse.
    L'affichage de l'option 1 ( affichage nombre de participants ainsi que le numéro que je leur ai affecté) me donne une liste qui ressemble à ça

    65
    65
    65
    10
    65
    >

    Donc je suis un peu bloquée pour la suite du programme et je ne vois pas du tout comment prendre en compte l'ordre d'enregistrement pour l'option 2 ( afficher le classement provisoire) sans utiliser ArrayList,
    help

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int[] participants = new int[nbParticipants]; 
    for(int i=0; i<nbParticipants;    i++ ) { 
         System.out.println (" ajouter un participant ");
         participants[i]=Terminal.lireChar(); 
    }
    C'est surprenant de déclarer un tableau de int et d'y mettre des caractères. C'est d'ailleurs pour ça que ça t'affiche '65' alors que tu as entré 'a'. D'ailleurs, au vu de ton programme global, ça me semblerait plus logique que partipants soit un tableau de String (String[]) et d'y mettre des noms de participants, non ?

    Ensuite, quel est le sens de ta question au sujet de l'option 2 ? Déjà, ton programme ne permet de ne réaliser qu'une seule option et après il se termine. Il devrait y avoir une boucle autour de l'affichage du menu et du choix d'options. Ensuite, si ta question est de savoir comment réaliser l'option 2, il s'agit d'afficher le classement provisoire, donc pour chaque participant son état : arrivé (et sa position à priori), encore en course, a abandonné ou est disqualifié
    Pour pouvoir afficher quelque chose, il faut qu'il soit en mémoire, donc déjà saisi. Donc il faut faire la saisie d'abord, l'affichage tu pourras le faire ensuite.
    Il s'agit donc de pouvoir associer à chaque participants une option (arrivé, abandon, disqualification ou encore en course). Pour réaliser tout problème, le plus simple, c'est le diviser en différents petits problèmes plus simple. Ici donc déjà au moins quatre sous-problèmes.
    - il faut pouvoir stocker les disqualifications
    - il faut pouvoir stocker les abandons
    - il faut pouvoir stocker les arrivées, avec la notion d'ordre d'arrivée
    - pour afficher ceux qui sont en courses, il suffit d'afficher les participants qui ne correspondent à aucune des trois options précédents, on va dire les "autres".

    On peut stocker toutes ces valeurs dans des tableaux séparés (le plus simples peut-être pour toi), mais on peut aussi n'utiliser qu'un seul tableau à une dimension. Mais l'affichage peut être compliqué (pour afficher les participants dans l'ordre d'arrivée). Question : as-tu déjà appris les tableaux à 2 dimensions ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. erreur structure je pense
    Par darkwall_37 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/04/2009, 21h40
  2. Erreur sur boucle for
    Par philippef dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2008, 13h44
  3. [structures] Erreur structure vide
    Par emi3113 dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/07/2007, 18h36
  4. [Tableaux] Erreur dans Boucle
    Par mickado dans le forum Langage
    Réponses: 11
    Dernier message: 25/01/2007, 11h52
  5. Erreur de boucle
    Par koala64 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/05/2005, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo