Partage
  • Partager sur Facebook
  • Partager sur Twitter

2 Variable "DO While"

...

    23 février 2015 à 18:55:11

    import java.util.Scanner;
    public class fullCalculator {
    
    	public static void main(String[] args) {
    		double result = 0; // multiple variable , switch to choose
    		int retryAfterErrorSign = -1;
    		int retry = -1;
    		
    			 {
    			System.out.println("Firt number: ");
    			Scanner sc = new Scanner(System.in);
    			double nbre1 = sc.nextDouble();
    
    			System.out.println("Second number: ");
    			double nbre2 = sc.nextDouble();
    
    			System.out.println("1 : Addition");
    			System.out.println("2 : Soustraction");
    			System.out.println("3 : Multiplication");
    			System.out.println("4 : Division");
    		retry = sc.nextInt();//Loop to rechoose number. 
    			
    			int sign = sc.nextInt();
    			switch (sign) {
    
    			case 1:
    				if (sign == 1)
    					result = nbre1 + nbre2;
    				System.out.println("The result is " + result);
    				break;
    			case 2:
    				if (sign == 2)
    					result = nbre1 - nbre2;
    				System.out.println("The result is " + result);
    				break;
    			case 3:
    				if (sign == 3)
    					result = nbre1 * nbre2;
    				System.out.println("The result is " + result);
    				break;
    			case 4:
    				if (sign == 4)
    					result = nbre1 / nbre2;
    				System.out.println("The result is " + result);
    				break;
    			default:
    				if (sign != 1 && sign != 2 && sign != 3 && sign != 4)
    					System.out.println("Error , number not recognize");
    				System.out.println("Retry (0/1)");
    					retryAfterErrorSign = sc.nextInt();//loop to rechoose sign;
    				    
    
    				}
    
    			} 
    
    		} 
    
    }
    


    Bonjour

      Debutant en Java j'ai reussi a faire une calculatrice assez basique  , j'aimerais faire 2 "do while" loop Une qui vas me permettre de demander à l'utilisateur à la fin s'il veut recommencer tout le programme .

    Aussi j'aimerais demander si l'utilisateur veut recommencer la partie ou je demande de choisir le signe s'il tape autre chose que '1 , 2, 3 ou 4'

    d’où mes deux variables 'retry' , j'ai essayé plusieurs tentatives de placement de mes loop mais à chaque fois ce n'est pas ce que je veux.

    Pour faire simple : Comment bien placer mes 2" Do While Loop" en utilisant mes 2 variables retry?

         Merci

    • Partager sur Facebook
    • Partager sur Twitter
    Debutant en Java ,Autodidacte et fière :) .
      23 février 2015 à 22:25:09

      Essaye de faire un schema sur papier de ce que tu souhaites obtenir. Ca devrait t'aider à organiser ton code.

      Sinon, tes if sont inutiles après les case. Quand tu fais case 1, par exemple, sign est forcément égal à 1.

      • Partager sur Facebook
      • Partager sur Twitter
        23 février 2015 à 22:33:03

        Salut

        Je devrais juste mettre case 1? par exemple et pas les if?

        Tu as des conseils sur comment travailler d'abord le code sur papier? merci

        -
        Edité par bobocuillere 23 février 2015 à 22:39:54

        • Partager sur Facebook
        • Partager sur Twitter
        Debutant en Java ,Autodidacte et fière :) .
          23 février 2015 à 23:18:42

          >Je devrais juste mettre case 1? par exemple et pas les if?

          Oui

          Pour le plan, tu fais un truc du genre

          Etape 1 : demander deux nombres

          Etape 2 : demander le type d'opération

          Etape 3 : si l'opération est valide, faire le calcul, sinon retourner à l'étape 2

          Etape 4 : demander si recommencer

          Etape 5 : si oui, retourner à l'étape 1

          Au lieu d'écrire "Etape", tu dessines une case par étape puis tu relies tes cases par des flèches suivant leur ordre, etc.

          Tu verras où sont tes tests, tes boucles, etc. C'est une façon de faire, il y en a sûrement d'autres. A toi de trouver celle qui te convient.

          • Partager sur Facebook
          • Partager sur Twitter
            23 février 2015 à 23:59:46

            Merci bru vais tester ça
            • Partager sur Facebook
            • Partager sur Twitter
            Debutant en Java ,Autodidacte et fière :) .
              24 février 2015 à 8:43:35

              En fait, faire switch(value){ case 1: ... case 2: ...} revient exactement à faire if(value == 1){...} else if(value ==2){...} donc la tu faisait if( value == 1 ){ if( value == 1 ){ ... }}
              • Partager sur Facebook
              • Partager sur Twitter
                24 février 2015 à 15:03:33

                Oue on m'a fait remarqué ça^^ , Sinon dans l'ensemble mon code est "logique" ou pas?
                • Partager sur Facebook
                • Partager sur Twitter
                Debutant en Java ,Autodidacte et fière :) .
                  24 février 2015 à 15:13:41

                  Il manque quelque chose non? Je ne comprend pas l'accolade entre la déclaration du retry et le System out ... 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 février 2015 à 20:45:16

                    Oui sKaizer c’était plus un test pour m'entrainer à faire des loop dans des loop.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Debutant en Java ,Autodidacte et fière :) .
                      26 février 2015 à 9:57:38

                      Mais elles sont ou tes boucles la ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 février 2015 à 22:51:30

                        Tant qu'à prendre des bonnes pratiques, il manque tous les commentaires et toutes les javadocs, ainsi que le package. Ensuite quand tu récupères quelque chose avec un Scanner fait un hasNextInt() ou hasNextDouble (pour ce cas, voir les autres dans la classe) ça t'évitera d'avoir des erreurs.

                        Pour faire une boucle qui recommence la saisit, tu es obligé(e) de faire un clavier.nextLine() avant de recommencer, de manière à ne pas reboucler à l'infini.

                        Enfin voilà le code avec quelques modifications (pour l'indentation, c'est 4 espaces, mais quand je c/c ça en mets 8) :

                        /*
                         * FullCalculator.java 26 Feb. 2015 Nom
                         */
                        package test;
                        
                        import java.util.Scanner;
                        
                        /**
                         * Calculatrice en ligne de commande
                         * 
                         * @author Nom
                         * @version 1.0
                         */
                        public class FullCalculator {
                        
                        	/**
                        	 * Demande à l'utilisateur de saisir deux réels sur la ligne de commande et
                        	 * un signe Fait l'opération voulue en fonction du signe
                        	 * <ol>
                        	 * <li>Addition</li>
                        	 * <li>Soustraction</li>
                        	 * <li>Multiplication</li>
                        	 * <li>Division</li>
                        	 * </ol>
                        	 * 
                        	 * @param args inutilisé
                        	 */
                        	public static void main(String[] args) {
                        		double result = 0.0; // Résultat qui sera affiché si calculé
                        		double x,            // Opérande gauche
                        		       y;            // Opérande droit
                        		int choix;           // Action choisie dans le menu
                        		boolean ok;          // Si la valeur saisit est correcte
                        		
                        		// Analyseur du flot d'entrée standard
                        		Scanner clavier = new Scanner(System.in);
                        
                        		// Pour le compilateur
                        		x = 0.0;
                        		y = 0.0;
                        
                        		// Tant que l'on ne choisit pas de quitter
                        		System.out.println("Calculatrice en ligne de commande");
                        		do {
                        			
                        			// Affichage du menu
                        			System.out.println("\nMenu : ");
                        			System.out.println("0 : Quitter");
                        			System.out.println("1 : Addition");
                        			System.out.println("2 : Soustraction");
                        			System.out.println("3 : Multiplication");
                        			System.out.println("4 : Division");
                        
                        			// Choix de l'action
                        			System.out.println("Saisir le choix : ");
                        			do {
                        				System.out.print("> ");
                        				choix = clavier.hasNextInt() ? clavier.nextInt() : -1;
                        				clavier.nextLine();
                        			} while (choix < 0 || 4 < choix);
                        
                        			// On demande le premier nombre tant qu'il est incorrect
                        			System.out.println("Saisir le premier nombre : ");
                        			do {
                        				System.out.print("> ");
                        				ok = clavier.hasNextDouble();
                        				if (ok) {
                        					x = clavier.nextDouble();
                        				}
                        				clavier.nextLine();  // On vide le tampon
                        			} while (!ok);
                        			
                        			// On demande le deuxième nombre tant qu'il est incorrect
                        			System.out.println("Saisir le deuxième nombre : ");
                        			do {
                        				System.out.print("> ");
                        				ok = clavier.hasNextDouble();
                        				if (ok) {
                        					y = clavier.nextDouble();
                        				}
                        				clavier.nextLine(); 
                        			} while (!ok);
                        			
                        			// On traite l'action au cas par cas
                        			switch (choix) {
                        
                        				case 1:
                        					result = x + y;
                        					break;
                        				case 2:
                        					result = x - y;
                        					break;
                        				case 3:
                        					result = x * y;
                        					break;
                        				case 4:
                        					result = x / y;
                        					break;
                        				default:
                        					System.out.print("Au revoir");
                        			}
                        
                        			// Affichage du résultat
                        			if (choix > 0) {
                        				System.out.println("Resultat : " + result);
                        			}
                        
                        		} while (choix != 0);
                        
                        	}
                        
                        }


                        -
                        Edité par TheDEMMONx 26 février 2015 à 22:52:20

                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 mars 2015 à 20:02:38

                          Wow !

                          Merci beaucoup Demmon .

                          je galérais par rapport au boucle dans les boucles .

                           La commande hasNext() , c'est un boolean? genre si l'utilisateur ne rentre pas un nombre entier , ça met une erreur?

                          Merci

                          -
                          Edité par bobocuillere 1 mars 2015 à 20:06:11

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Debutant en Java ,Autodidacte et fière :) .
                            1 mars 2015 à 20:08:02

                            Doc de java : http://docs.oracle.com/javase/7/docs/api/

                            Package : java.util

                            Class : Scanner

                            Toutes la documentation pour utiliser cet outil (et tous les outils java en fait) :)

                            Oui hasNext() retourne un boolean s'il y a une chaine de caractère dans le tampon clavier.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 mars 2015 à 19:49:36

                              Merci l'ami :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Debutant en Java ,Autodidacte et fière :) .

                              2 Variable "DO While"

                              × 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