Partage
  • Partager sur Facebook
  • Partager sur Twitter

boucle java

Sujet résolu
    30 juin 2019 à 22:00:59

    bonjour,

    si quelqu'un peux m'expliquer pourquoi avec se code :

    import java.util.Scanner;
    
    public class test {
    
    	public static void main(String[] args) {
    		
    		Scanner sc = new Scanner(System.in);
    		String re = "o";
    //--------------------------
    		System.out.println("Saisissez un nombre :");
    	do {
    		int nb = sc.nextInt();
    		if(nb < 0)
    			{
    				System.out.println("c'est un nombre negatif !");
    			}
    		else if(nb > 0)
    			{
    				System.out.println("c'est un nombre positif !");
    			}
    		else
    			{
    				System.out.println("vous avez saisie un nombre nul !");
    			}
    		do{
    			System.out.println("re lancer ? (o/n)");
    			re = sc.nextLine();
    		}while(re != "o" && re != "n");
    	}while(re == "o");
    	}
    }


    lors de l’exécution le "re lancer" s'affiche 2 fois !

    et, peu importe le caractère saisie, la boucle ne s’arrête jamais...

    merci d'avance de votre aide :)

    voilà le résultat une fois exécuter avec éclipse ;)

    -
    Edité par Nogueira Baptiste 30 juin 2019 à 22:04:01

    • Partager sur Facebook
    • Partager sur Twitter

    Baptiste Nogueira

      30 juin 2019 à 23:08:21

      Bonjour,

      Il faut mettre "sc.nextLine();" pour réinitialiser la saisie au deuxième do while. Et il faut utiliser un caractère  (char)à la place du string pour la réponse.

      import java.util.Scanner;
      
      public class Filetest {
       
          public static void main(String[] args) {
               
              Scanner sc = new Scanner(System.in);
              char re = ' ';
              int nb = 0;
      //--------------------------
              
          do {
          	System.out.println("Saisissez un nombre :");
              nb = sc.nextInt();
              if(nb < 0)
                  {
                      System.out.println("c'est un nombre negatif !");
                  }
              else if(nb > 0)
                  {
                      System.out.println("c'est un nombre positif !");
                  }
              else
                  {
                      System.out.println("vous avez saisie un nombre nul !");
                  }
              do{
                  System.out.println("re lancer ? (o/n)");
                  sc.nextLine();
                  re = sc.nextLine().charAt(0);
              }while(re != 'o' && re != 'n');
          }while(re == 'o');
          }
      }

      Tu as plus d'infos ici : https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-java/20615-apprenez-a-lire-les-entrees-clavier

      -
      Edité par Nemo404 30 juin 2019 à 23:10:23

      • Partager sur Facebook
      • Partager sur Twitter
        30 juin 2019 à 23:11:03

        Ok, merci beaucoup!
        • Partager sur Facebook
        • Partager sur Twitter

        Baptiste Nogueira

          30 juin 2019 à 23:31:48

          Comparer des chaînes avec ==, ça risque de pas le faire.
          • Partager sur Facebook
          • Partager sur Twitter
            2 juillet 2019 à 20:39:41

            oui ^^ t’inquiète.... j'ai mis un String psk je ne savais pas où chercher :euh: ^^

            merci de ton aide ^^

            • Partager sur Facebook
            • Partager sur Twitter

            Baptiste Nogueira

              3 juillet 2019 à 7:14:37

              Tu t'habilles comme tu veux, c'est pas le problème
              • Partager sur Facebook
              • Partager sur Twitter
                4 juillet 2019 à 23:46:11

                michelbillaud a écrit:

                Tu t'habilles comme tu veux, c'est pas le problème


                :euh:
                • Partager sur Facebook
                • Partager sur Twitter

                Baptiste Nogueira

                  5 juillet 2019 à 23:11:12

                  tsss, humour de dev de base :lol: le string, heu, enfin bref si tu utilise les strings, c'est ton choix ton droit mais utilise le comme il faut !

                  if(re.equals("o")) {

                  ...

                  }

                  le == ne fonctionne pas avec des objets, il ne compare que la référence, pas la valeur.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 juillet 2019 à 23:37:05

                    pifou25 a écrit:

                    tsss, humour de dev de base :lol: le string, heu, enfin bref si tu utilise les strings, c'est ton choix ton droit mais utilise le comme il faut !

                    if(re.equals("o")) {

                    ...

                    }

                    le == ne fonctionne pas avec des objets, il ne compare que la référence, pas la valeur.


                    nan nan, je n'utilise pas String.... mais je cherchais où était le problème... donc j'ai un peu tout changer avant etre venu chercher de l'aide ici.... ^^'
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Baptiste Nogueira

                      6 juillet 2019 à 21:25:49

                      Ce qu'ils essayent de te dire, c'est que tu n'est pas assuré que ton code fonctionne en toute circonstance.

                      Essaye ça pour comprendre :

                      "o" == new String("o");      // vaut false
                      "o".equals(new String("o")); // vaut true

                      La méthode equals() regarde si les objets ont la même valeur. Pour des chaînes de caractères, ça veut dire qu'elles représentent le même texte.

                      L'opérateur == regarde s'il s'agit de la même instance String.
                      Si tu as d'un côté une chaîne "o" écrite en dur dans ton code, et de l'autre une chaîne "o" qui a été tapée au clavier, elles peuvent être considérées comme différentes au sens de ==. Ce sont deux objets différents, même s'ils représentent le même texte.

                      Bonne pratique : toujours comparer les String avec equals.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 juillet 2019 à 0:21:52

                        Zachee54 a écrit:

                        Ce qu'ils essayent de te dire, c'est que tu n'est pas assuré que ton code fonctionne en toute circonstance.

                        Essaye ça pour comprendre :

                        "o" == new String("o");      // vaut false
                        "o".equals(new String("o")); // vaut true

                        La méthode equals() regarde si les objets ont la même valeur. Pour des chaînes de caractères, ça veut dire qu'elles représentent le même texte.

                        L'opérateur == regarde s'il s'agit de la même instance String.
                        Si tu as d'un côté une chaîne "o" écrite en dur dans ton code, et de l'autre une chaîne "o" qui a été tapée au clavier, elles peuvent être considérées comme différentes au sens de ==. Ce sont deux objets différents, même s'ils représentent le même texte.

                        Bonne pratique : toujours comparer les String avec equals.


                        ok ^^ merci beaucoup !
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Baptiste Nogueira

                        boucle java

                        × 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