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 :

Message unique dans une boucle


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Par défaut Message unique dans une boucle
    bonjour,
    je dois faire un programme simulant le vol d'un mirage (avion).
    Juste du point de vue variables (temps, altitude, vitesse) dans une boucle.
    Je dois afficher un message quand mon avion a atteint la vitesse du son : "mur du son dépassé!". Pas de problème jusqu'ici.
    Mon problème est que une fois la vitesse atteinte et le message écrit, il le répète puisque mon avion continue son vol.
    Comment puis-je dire à mon programme une fois que le message est affiché, ne le répète pas???
    Merci d'avance...

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    Allez, je me lances...

    Je vous propose la chose suivante :

    En premier lieu, nous allons ajouter une variable. Appelons-la 'vtMemo'.
    Déclarons cette variable, juste avant d'entrer dans la boucle et fixons sa valeur à 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int vtMemo = 0;
    boucle {.....}
    on commence en premier, une fois entré dans la boucle par tester la valeur de vtMemo, sachant qu'elle ne sera utile que dans deux cas. Le premier de ces cas, est qu'elle doit être différente de 0. Le second cas, on verra plus loin.
    Si vtMemo vaut 0, on ne s'en occupe pas, donc, on réalise normalement votre boucle à une petite différence près, à la fin de la boucle, on stock la vitesse mesurée dans vtMemo.
    A la boucle suivante, vtMemo ne vaut plus zéro. C'est maintenant qu'entre en jeu la seconde condition.
    vtMemo doit être différent de la vitesse mesurée dans cette nouvelle boucle.
    Si ces deux conditions sont trouvée, vtMemo ne vaut pas zéro, et est différent de la nouvelle mesure de vitesse, alors, vtMemo devient utile.
    En effet, le moment de votre boucle qui vous intéresse, est le moment du franchissement du mur du son. A ce moment précis, vtMemo est inférieur ou égale à la vitesse du son, et la vitesse mesurée supérieur à la vitesse du son.
    Donc, par comparaison, lorsque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vtMemo <= vitesseDuSon && vitesseMesuree > vitesseDuSon
    est vrai uniquement au moment du franchissement du mur du son, et en cas d'accélération.
    Dans ce cas, une fois la vitesse du son dépassée, c.a.d. que vtMemo et vitesseMesuree sont tous deux supérieur à la vitesse du son, alors on est plus dans le franchissement, tout comme lorsqu'ils sont tous deux inférieur à la vitesse du son. Cette condition ne sera vrai qu'à ce moment. Il ne reste plus qu'à exploiter cet état pour conditionner l'affichage du message qui n'apparaître que pendant ce bref instant.
    En plus, si vous faites une soustraction entre vtMemo et vitesseMesuree, vous connaîtrez l'accélération/décélération de l'appareil. Résultat positif pour une accélération, négatif pour une décélération, et la valeur du résultat représentant le taux d'accélération/décélération.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Par défaut
    La solution de yotta a un avantage : elle gère le franchissement du mur du son de façon pérenne, si l'avion repasse en dessous puis la franchit une 2e fois.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut Mur dur son
    Dans ta boucle while... tu rajoute un if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    boolean bool1=true;
     
    while(condition)
     
    {
     
    if (variable==mur_du_son && bool1){
    print();
     
    bool1= false;
    }

    Qu'en penses tu?


    }

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Par défaut
    Merci pour vos réponses... surtout rapides...^^

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kremvax Voir le message
    La solution de yotta a un avantage : elle gère le franchissement du mur du son de façon pérenne, si l'avion repasse en dessous puis la franchit une 2e fois.
    Salut,

    on peut résoudre ça sans introduire de nouvelle variable à partir de la solution de @thelvin :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( vitesse>VITESSE_DU_SON) {
        if ( !messageAffiche ) {
           afficheMessage();
           messageAffiche=true;
        }
    } else {
        messageAffiche=false;
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( vitesse>VITESSE_DU_SON ) {
        if ( !messageAffiche ) {
           afficheMessage();
           messageAffiche=true;
        }
    } else if ( messageAffiche ) {
        messageAffiche=false;
    }
    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.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    on peut résoudre ça sans introduire de nouvelle variable à partir de la solution de @thelvin :
    Oui bien sûr. Mais je préfèrerai toujours la solution stateless

  8. #8
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kremvax Voir le message
    Oui bien sûr. Mais je préfèrerai toujours la solution stateless
    Oui la solution stateless est toujours mieux que celle stateful.

    Parce que la variable vtMemo serait stateless ?
    En plus, le fait qu'on doit la traiter différemment lorsqu'elle vaut 0 me pose déjà un problème en soi.
    Sémantiquement, le fait de dire qu'on doit afficher le message lorsqu'on repasse en dessous de la vitesse du son, est plus juste, que de dire que le message doit s'afficher quand on passe la vitesse du son alors qu'on ne l'avait pas déjà passé, non ?
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage de message dans une boucle
    Par Sega24 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2014, 09h15
  2. Afficher un message une seule fois dans une boucle infinie
    Par emulienfou dans le forum Langage
    Réponses: 3
    Dernier message: 24/02/2011, 14h12
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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