Do et while

Résolu
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 !

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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. persepolis7 Messages postés 61 Statut Membre 1
       
      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 :))))
      0
      1. KX Messages postés 19031 Statut Modérateur 3 020 > persepolis7 Messages postés 61 Statut Membre
         
        La négation se fait avec l'opérateur
        !
        comme
        while (!choix.equals("non"));
        par exemple.
        0
    2. persepolis7 Messages postés 61 Statut Membre 1
       
      J'avais essayé while(!=choix.equals("non")); mais ça ne marchait pas, merci :D !
      0