IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Un booléen qui se modifie après une codition if elseif


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Pasionné de Java
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Pasionné de Java
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Un booléen qui se modifie après une codition if elseif
    Bonjour, désolé si mon cas vous semble trop simple.

    Voici mon problème j'ai voulu mettre en pratique un petit exercice consistant à associé un tarif à un poids d'une lettre.

    Au delà de 3kg il s'agit d'un colissimo nous n'avons plus à afficher le poids.

    Le problème est que cela ne marche pas.
    La première partie fonctionne.
    A la fin du code la condition if (poidsmax=true) ne tient pas compte de la valeur de poidsmax(booléen) des conditions précédentes.
    J'ai ajouté une simple condition de test pour mettre en évidence mon problème dans la seconde partie.

    Exemple quand je saisie :

    Quelle est le poids de votre lettre ? 22
    Le poids de votre lettre est de : 22g
    Pour info : poids de la lettre = 22 et poidsmax = false
    Dans la condition if poidsmax=true poidsmax=true


    Dans cet exemple 22g, la valeur poidsmax = false.
    Seulement à la fin de la condition if (poidsdelalettre<=20), la valeur poidsmax = true ....

    J'ai dû oublier quelque chose quelque part.

    Quelqu'un a une idée d'une solution ?

    Merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
     
     
        public static void main(String args[]) {
     
     
     
        	Scanner poids =new Scanner (System.in);
     
     
        	System.out.print("Quelle est le poids de votre lettre ? ");
     
        	int poidsdelalettre = poids.nextInt();
        	double tarifenvoi=0;
        	boolean poidsmax=false;
     
     
        	System.out.println("Le poids de votre lettre est de : "+poidsdelalettre+"g");
     
     
        	if (poidsdelalettre<=20)
        		{tarifenvoi=0.61;
        		poidsmax=false;}
     
        		else if (poidsdelalettre<=50)
        	    		{tarifenvoi=1.02;
        	    		 poidsmax=false;}
     
        		else if (poidsdelalettre<=100)
    	    			{tarifenvoi=1.55;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=250)
    	    			{tarifenvoi=2.45;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=1000)
        				{tarifenvoi=4.35;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=2000)
    					{tarifenvoi=5.65;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=3000)
    					{tarifenvoi=6.55;
    		 			poidsmax=false;}
     
        		else if (poidsdelalettre>3000)
    			{poidsmax=true;};
     
    			System.out.println("Pour info : poids de la lettre = "+poidsdelalettre+" et poidsmax = "+poidsmax);
     
     
     
     
        	if(poidsmax=true){System.out.println("Dans la condition if (poidsmax=true) poidsmax="+poidsmax);}
     
        	else {System.out.println("poidsmax=false valeur = "+poidsmax);}
     
     
        }
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le signe = est un signe d'affectation (pour donner une valeur à une variable). Le signe de comparaison d'égalité est ==.

    Quand tu écris if(poidsmax=true), ça met true dans poidsmax, puis ça évalue poidsmax (qui vaut true donc) : donc ce test est toujours vrai.

    Il faudrait écrire :

    Mais comme l'évaluation d'une expression dans un if est toujours une comparaison à true, et que poidsmax est un booléen, tu peux écrire directement :

    ce qui t'évitera à l'avenir de taper =, au lieu de ==, par erreur.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Pasionné de Java
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Pasionné de Java
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci Joel !

    C'est tout à fait ça.

    Réponse claire et constructive.

    Je post le code finalisé pour les utilisateurs qui rencontreraient le même problème.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    class tarif1 {
     
     
        public static void main(String args[]) {
     
     
     
        	Scanner poids =new Scanner (System.in);
     
     
        	System.out.print("Quelle est le poids de votre lettre (en grammes) ? ");
     
        	int poidsdelalettre = poids.nextInt();
        	double tarifenvoi=0;
        	boolean poidsmax=false;
     
     
        	System.out.println("Le poids de votre lettre est de "+poidsdelalettre+"g");
     
     
        	if (poidsdelalettre<=20)
        		{tarifenvoi=0.61;
        		poidsmax=false;}
     
        		else if (poidsdelalettre<=50)
        	    		{tarifenvoi=1.02;
        	    		 poidsmax=false;}
     
        		else if (poidsdelalettre<=100)
    	    			{tarifenvoi=1.55;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=250)
    	    			{tarifenvoi=2.45;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=1000)
        				{tarifenvoi=4.35;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=2000)
    					{tarifenvoi=5.65;
       	    		 	poidsmax=false;}
     
        		else if (poidsdelalettre<=3000)
    					{tarifenvoi=6.55;
    		 			poidsmax=false;}
     
        		else if (poidsdelalettre>3000)
    			{poidsmax=true;};
     
     
     
        	if(poidsmax){System.out.println("Votre lettre dépasse 3 kg, merci de consulter nos tarifs de colis.");}
     
        	else {System.out.println("Voici le tarif de votre envoi est de "+tarifenvoi+" €");}
     
        }
    }

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    pour éviter ce genre de bug, prend l'habitude de mettre les constants à gauches dans le test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(true=poidsmax) // t'auras directement un erreur de compilation
    if (true==poidsmax)// la ça passe
    if(unString.equals("a")) // tu peux avoir un NullPointerException
    if("a".equals(unString)) // la ça passe
    A+.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Pasionné de Java
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Pasionné de Java
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci andry.aime !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/03/2010, 11h03
  2. [ClickOnce] Garder des fichiers modifiés après une update
    Par User.Anonymous dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/06/2009, 16h48
  3. Réponses: 2
    Dernier message: 21/11/2008, 14h02
  4. [batch]fichiers modifiés après une certaine date
    Par skalimer0 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/09/2008, 08h14
  5. Fichier .bat qui s'arrête après une commande
    Par VinnieMc dans le forum Administration
    Réponses: 6
    Dernier message: 28/08/2008, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo