Une bête erreur dans un bête script ....

Résolu
BotroxJrs Messages postés 3 Statut Membre -  
BotroxJrs Messages postés 3 Statut Membre -
Salut , je débute dans la programmation cela fait un moment que ça m'interresse et j'ai décidé de me lancé , après avoir lu quelques pages j'essaye un petit script pour voir si je m'en sors ... malheureusement je bloque déja.

Voila mon essai

import java.util.Scanner;

public class sdz1 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int reponse = 500;
String yes = "oui";
int reponse2 = 17;

do {
System.out.println("Combien font 10 x 50 ? ");
System.out.println("Réessayé jusqu'a ce que la réponse soit correcte");
reponse = sc.nextInt();
}
while(reponse != 500);

System.out.println("Bravo, bonne réponse ! ");
do {

System.out.println("Voulez-vous continuer ? ");

yes = sc.nextLine();

}while(yes != "oui");

do {
System.out.println("plus compliqué , combien fait : \"5+3x4\" ? " );
System.out.println("Réessayé jusqu'a ce que la réponse soit correcte");
reponse2 = sc.nextInt();

}while(reponse2 != 17);

System.out.print("Très bien, tu as reussis ! ");

}
}


Le premier problème est que le
 "Voulez-vous continuer ? "
s'affiche 2 fois , bon ça c'est plutôt secondaire .
Le problème suivant est que je fait la même démarche pour chaque boucle mais la boucle "
"Voulez-vous continuer ? "
ne fonctionne pas , quand j'entre la réponse
 "oui"
la boucle recommence et me re-demande
"Voulez-vous continuer ? "
....
Merci d'avance a ceux qui vont prendre de leur temps pour m'aider !

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Le problème c'est la combinaison
    sc.nextInt()
    et
    sc.nextLine()
    car quand tu travailles avec le clavier, tu tapes ton nombre avec
    sc.nextInt()
    et après tu appuies sur Entrée qui est consommée par le
    sc.nextLine()
    suivant...

    Deux manière de résoudre le problème :
    • Après chaque
      sc.nextInt()
      tu rajoute un
      sc.nextLine()
      qui récupère la touche Entrée.
    • Tu remplaces tes
      sc.nextInt()
      par un
      Integer.parseInt(sc.nextLine())
      qui convertit la ligne en entier.

    Personnellement je préfère la deuxième solution, mais la première permet de mieux comprendre le problème.

    Remarque : c'est une particularité qui ne concerne que le clavier, mais la classe Scanner est plus générale que ça.
    0
    1. BotroxJrs Messages postés 3 Statut Membre
       
      Parfait , merci beaucoup !
      0
  2. tarek_dotzero Messages postés 834 Statut Membre 122
     
    Pour le deuxième problème, c'est la vérification de l'égalité pour les chaînes de caractères (String). Pour vérifier qu'une chaîne est différentes d'une autre, l'opérateur != ne fonctionne plus, il faut faire appel à la fonction equals de la classe String, alors au lieu d'avoir :

    while(yes != "oui")


    Vous devez mettre :

    while(!yes.equals("oui"))
    0
    1. BotroxJrs Messages postés 3 Statut Membre
       
      Effectivement ca fonctionne mieux comme ca , merci beaucoup .
      0