Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec la boucle do while

boucle do while

14 août 2018 à 3:18:55

package premier_TP_JAVA;

import java.util.Scanner ;

public class exemple_java {


public static void main(String[] args) {
     Scanner keyZ = new Scanner (System.in) ;

     String reponse = new String(" ") ;
     char sexe = ' ' ;

     do {
     System.out.println("entrez votre genre SVP") ;
     sexe = keyZ.nextLine().charAt(0) ;
     switch (sexe) {
     case 'M' :
         System.out.println("vous e^tes un homme");
         break ;
     case 'F' :
         System.out.println("vous êtes une femme");
         break ;
     case 'B' :
         System.out.println("vous êtes bisexuel");
         break ;
         default :
             System.out.println("vous n'avez aucun genre") ;
     }



     do {
         System.out.println("voulez vous refaire cet exercice ? Répondez par oui ou non") ;

         reponse = keyZ.nextLine()  ;

     } while (reponse != "oui" && reponse != "non") ;

} while (reponse == "oui") ;

     System.out.println("Merci d'avoir fait l'exercice. A la prochaine");
}

}

Le problème se pose avec la portion du code en rouge. Quand on entre "oui" ou "non", normalement on doit sortir de la boucle.

Ce qui n'est pas le cas.

Votre aide sera la bienvenue.

-
Edité par zannou@007 14 août 2018 à 3:20:49

  • Partager sur Facebook
  • Partager sur Twitter
14 août 2018 à 3:50:22

Bonjour,

Merci d'utiliser la mise en forme de code Image

Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Image de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: java;">Votre code ici</pre>.

Manque de Politesse

Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

  • Partager sur Facebook
  • Partager sur Twitter
14 août 2018 à 12:50:18

Bonjour Mr.

Je m’excuse d'avoir enfreint certaines règles du site.

Je ferai l'effort de m'y conformer les prochaines fois.

Cordialement.

-
Edité par zannou@007 14 août 2018 à 12:50:30

  • Partager sur Facebook
  • Partager sur Twitter
14 août 2018 à 16:37:10

Tu le dis toi-même :

Quand on entre "oui" ou "non", normalement on doit sortir de la boucle.

Or, ta condition est ça : reponse != "oui" && reponse != "non"

Ça se traduit par "réponse différente de "oui" et réponse différente de "non" "...

A première vue, ça m'a l'air d'être cette erreur.

Deuxièmement, il faut éviter de faire des comparaisons de strings avec les opérateurs booléens. Les String fonctionnent assez différemment derrière et les opérateurs booléens peuvent ne pas faire ce que tu veux.

Dans ton cas, il faudrait plutôt écrire (!"oui".equals(reponse) || !"non".equals(reponse))

Et la chaîne de caractère en dur pour la comparaison. Ça évite plus facilement le nullPointerException dans le cas où reponse est null, d'après ce qu'on m'a dit au boulot.

-
Edité par RutsukuFushin 14 août 2018 à 16:37:29

  • Partager sur Facebook
  • Partager sur Twitter
15 août 2018 à 2:52:31

Bonjour RutsukuFushin.

Merci infiniment pour ton aide.

Tu y étais presque.

En fait il me fallait plutôt écrire (!"oui".equals(reponse) && !"non".equals(reponse))

et non (!"oui".equals(reponse) || !"non".equals(reponse)) comme tu l'as dit.

Maintenant le programme fonctionne comme je veux.

Merci également pour tes conseils.

  • Partager sur Facebook
  • Partager sur Twitter