Boucle do while
Résolu
Zellian
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Zellian Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Zellian Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je me suis remis à JAVA récemment et j'ai un problème avec des boucles DO .. WHILE dès qu'il y a un scanner dedans :
Voici un exemple simplifié de mon problème avec un System.out AVANT et APRES pour bien voir ce qu'il se passe :
Voici ce que j'obtiens dans la console :
D'où ma question :
Pourquoi partant de isMatch = false [initialisation] , puis je passe par le Scanner isMatch = true (choix = oui) [lecture Scanner] et la seconde fois isMatch = false ( choix = oui )
Je me suis remis à JAVA récemment et j'ai un problème avec des boucles DO .. WHILE dès qu'il y a un scanner dedans :
Voici un exemple simplifié de mon problème avec un System.out AVANT et APRES pour bien voir ce qu'il se passe :
public static void main(String[] args) {
// TODO Auto-generated method stub
String choix = new String() ;
Boolean isMatch = true;
Scanner sc = new Scanner(System.in);
do {
System.out.println("AVANT choix = " + choix+ " isMatch = "+choix.equals("oui") );
System.out.print("Voulez-vous continuer ? oui / non :" );
choix = sc.nextLine();
isMatch = choix.equals( "oui" );
System.out.println("APRES choix = " + choix+ " isMatch = "+choix.equals("oui") );
sc.nextLine();
} while (isMatch == true) ;
System.out.print("Fin");
sc.close();
}
}
Voici ce que j'obtiens dans la console :
AVANT choix = isMatch = false
Voulez-vous continuer ? oui / non :oui
APRES choix = oui isMatch = true
AVANT choix = oui isMatch = true
Voulez-vous continuer ? oui / non :oui
APRES choix = oui isMatch = false
D'où ma question :
Pourquoi partant de isMatch = false [initialisation] , puis je passe par le Scanner isMatch = true (choix = oui) [lecture Scanner] et la seconde fois isMatch = false ( choix = oui )
Configuration: Windows / Chrome 83.0.4103.116
A voir également:
- Xwxwxwxwv songs do 2024
- Office 2024 - Accueil - Bureautique
- Père noël whatsapp 2024 - Accueil - Messagerie instantanée
- Fichier do - Forum Logiciels
- Microsoft money 2024 - Guide
- Xwxwxwxwv songs do 2023 album songs - Forum Musique / Radio / Clip
1 réponse
Bonjour,
En testant ton code j'ai bien le résultat souhaité, pas ton bug :
Si vraiment tu as un problème tu peux afficher les différents octets du String choix, il est par exemple possible qu'il y ait un espace qui se promène.
Remarque : il y a plusieurs "maladresses" dans ton code, voici une version corrigée :
Résultat :
En testant ton code j'ai bien le résultat souhaité, pas ton bug :
AVANT choix = isMatch = false
Voulez-vous continuer ? oui / non :oui
APRES choix = oui isMatch = true
AVANT choix = oui isMatch = true
Voulez-vous continuer ? oui / non :oui
APRES choix = oui isMatch = true
AVANT choix = oui isMatch = true
Voulez-vous continuer ? oui / non :non
APRES choix = non isMatch = false
Fin
Si vraiment tu as un problème tu peux afficher les différents octets du String choix, il est par exemple possible qu'il y ait un espace qui se promène.
System.out.println(Arrays.toString(choix.getBytes())); // import java.util.Arrays;
Remarque : il y a plusieurs "maladresses" dans ton code, voici une version corrigée :
public static void main(String[] args) { Scanner sc = new Scanner(System.in); String choix; do { System.out.print("Voulez-vous continuer ? oui / non : "); choix = sc.nextLine(); System.out.println("choix=" + choix + Arrays.toString(choix.getBytes())); } while (choix.equals("oui")); System.out.print("Fin"); }
Résultat :
Voulez-vous continuer ? oui / non : oui
choix=oui[111, 117, 105]
Voulez-vous continuer ? oui / non : oui
choix=oui[111, 117, 105]
Voulez-vous continuer ? oui / non : non
choix=non[110, 111, 110]
Fin
Voici ce que j'obtiens avec la version corrigée :
Chez moi, cela donne et ce qui correspond à du Latin-1
A priori les valeurs chez toi devraient être différentes (je pense que ce sera UTF-16), mais tu peux forcer le Scanner pour avoir un autre charset, par exemple
J'avais modifié cette option pour pouvoir utiliser des accents dans les variables.
Après modifications même la partie pour les caractères fonctionne.
Merci beaucoup pour tes explications.