Partage
  • Partager sur Facebook
  • Partager sur Twitter

vider une variable et signe innaproprier

    1 mars 2015 à 15:30:21

    Bonjour premierement je ne comprend pas pourquoi il faut vide la variable reponse ex: reponse = '  '; avant dentrer dans la 2ieme boucle et 2iemement pourquoi dans le while qui es dans le while ou es obliger de tester linegaliter avec != plutot que de marquer ==. ( Ce que je ne comprend pas son situer ou il y a les 2 commentaire dans le code.

    Merci.

    String prenom;
    char reponse = 'O';
    Scanner sc = new Scanner(System.in);
    while (reponse == 'O')
    {
      System.out.println("Donnez un prénom : ");
      prenom = sc.nextLine();
      System.out.println("Bonjour " +prenom+ ", comment vas-tu ?");                        
    
      reponse = ' '; // pourquoi faut-il vide la variable reponse
                            
    
      while(reponse != 'O' && reponse != 'N') // ici pourquoi je ne peu pas marquer == au lieu de !=
      {
        //On demande si la personne veut faire un autre essai
        System.out.println("Voulez-vous réessayer ? (O/N)");
        reponse = sc.nextLine().charAt(0);
      }
    }
    System.out.println("Au revoir…");





    -
    Edité par korked 1 mars 2015 à 15:33:45

    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2015 à 16:21:29

      Déjà quand c'est bien codé on utilise plutôt des do ... while pour les actions vu qu'on doit les faire au moins une fois. Comme ceci :

      		String prenom;    // Prenom qui sera affiche
      		char reponse;     // Pour recommencer
      		// Analyseur du flot d'entrée standard
      		Scanner sc = new Scanner(System.in);
      
      		// On demande des prenoms tant que l'utilisateur ne veut pas arrêter
      		do {
      		    //
      		    System.out.print("Entrez un prénom : ");
      		    prenom = sc.nextLine();
      		    System.out.println("Bonjour " + prenom + ", comment vas-tu ?");                                             
      		 
      		    // On recommence tant qu'un mauvais choix est saisi
      		    do {
      		        //On demande si la personne veut faire un autre essai
      		        System.out.println("Voulez-vous réessayer ? (O/N)");
      		        // On teste qu'il y ait bien une valeur
      		        reponse = sc.hasNext() ? sc.next().charAt(0) : '\0';
      		        sc.nextLine();       // vide le tampon 
      		    } while (reponse != 'O' && reponse != 'N');  // reponse vaut O ou N
      		    
      		} while (reponse == 'O');    // reponse vaut N
      
      		System.out.println("Au revoir…");
      
      	}

      Ensuite pour tes questions :

      1/ On vide réponse de telle manière à ce que reponse != 'O' && reponse != 'N' soit évalué à false pour entrer dans la boucle et demander l'opération à affectuer

      2/ Si tu marques reponse == 'O' && reponse == 'N' c'est impossible vu que reponse ne peut pas valoir O et N à la fois ! Il faudrait donc mettre un OU au lieu d'un ET, à ce moment la boucle s'exécuterait uniquement s'il y a O ou N dans reponse, ce qui ne serait jamais le cas vu qu'on vide reponse à la ligne du dessus

      • Partager sur Facebook
      • Partager sur Twitter
        1 mars 2015 à 16:21:40

        Il ne faut pas la "vider". Il faut juste lui donner une valeur qui permette d'entrer dans la boucle. N'importe quelle valeur différente de 'O' et 'N' aurait fait l'affaire.

        Ceci dit, comme on doit entrer au moins une fois dans chaque boucle, des boucles do ... while me sembleraient bien plus appropriées et on n'aurait pas besoin d'initialiser reponse avec des valeurs "artificielles".

        • Partager sur Facebook
        • Partager sur Twitter

        vider une variable et signe innaproprier

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown