Do et while [Résolu/Fermé]

Signaler
Messages postés
58
Date d'inscription
mercredi 10 janvier 2018
Statut
Membre
Dernière intervention
16 janvier 2019
-
Messages postés
58
Date d'inscription
mercredi 10 janvier 2018
Statut
Membre
Dernière intervention
16 janvier 2019
-
Bonjour j'apprends le Java et je rencontre un petit problème avec la boucle do while, mais je ne sais pas pourquoi
ps : mon imagination est un peu fatiguée faites pas attention au sens des instructions
merci !


import.util.Scanner;
public class Exercices {
 public static void main(String[]arg) {
  Scanner sc = new Scanner(System.in);
  
  
  int jour = 0;
  String choix = "oui";
  
  
  do {
   System.out.println("Nous sommes le :");
   jour = sc.nextInt();
  
  if(jour == 17) {
   System.out.println("Nous sommes le :"+jour);
  }
  
  else if (jour == 16) {
   System.out.println("Le "+jour+" c'était hier");
  }
  
  System.out.println("Tu veux ressayer ? oui/non");
                choix = " ";
  choix = sc.nextLine();
  sc.nextLine();
  }while(choix.equals("oui"));
  
        System.out.println("A bientôt sur AlzeihmerLand !");
 };
        
};

1 réponse

Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 629
Bonjour,

Le problème ce n'est pas la boucle mais le Scanner dans le cas particulier de
System.in
.

nextInt
lit juste un entier, or dans la console (System.in) tu tapes un entier + la touche Entrée.
La touche Entrée reste toujours en attente après le
nextInt
et est lue avec
choix = sc.nextLine();
donc la valeur "oui" ou "non" ne sera pas lue à ce moment là, mais dans le
nextLine()
d'après.

Ce qui fait que
choix.equals("oui")
est toujours faux car
choix
vaut
\r\n
(la touche Entrée), ce que tu peux voir en affichant la valeur de choix après l'avoir lue.

Pour corriger ça je t'invite à toujours utiliser
sc.nextLine()
dans le cas particulier de
System.in
et à utiliser des méthodes de conversions explicites comme
Integer.parseInt
pour passer d'un String à un int.

NB. En pratique, l'usage de la boucle do-while est rarissime dans un programme Java, les boucles les plus utilisées étant (dans l'ordre) : for-each, for, while et en bon dernier do-while.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60942 internautes nous ont dit merci ce mois-ci

Messages postés
58
Date d'inscription
mercredi 10 janvier 2018
Statut
Membre
Dernière intervention
16 janvier 2019

Bonsoir,
merci pour l'aide j'ai compris.
J'ai une autre question pour tester si une var String n'est pas égale comment on fait ? juste la syntaxe

ex : while(choix.equals("oui"));

mais pour tester l'inverse ?

Tant mieux si c'est rarissime ça m'arrange :))))
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 629 >
Messages postés
58
Date d'inscription
mercredi 10 janvier 2018
Statut
Membre
Dernière intervention
16 janvier 2019

La négation se fait avec l'opérateur
!
comme
while (!choix.equals("non"));
par exemple.
Messages postés
58
Date d'inscription
mercredi 10 janvier 2018
Statut
Membre
Dernière intervention
16 janvier 2019

J'avais essayé while(!=choix.equals("non")); mais ça ne marchait pas, merci :D !