Do et while
Résolu
persepolis7
Messages postés
61
Statut
Membre
-
persepolis7 Messages postés 61 Statut Membre -
persepolis7 Messages postés 61 Statut Membre -
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 !
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
-
Bonjour,
Le problème ce n'est pas la boucle mais le Scanner dans le cas particulier deSystem.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 lenextInt
et est lue avecchoix = sc.nextLine();
donc la valeur "oui" ou "non" ne sera pas lue à ce moment là, mais dans lenextLine()
d'après.
Ce qui fait quechoix.equals("oui")est toujours faux carchoix
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 utilisersc.nextLine()
dans le cas particulier deSystem.in
et à utiliser des méthodes de conversions explicites commeInteger.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.