Problème If Else

sofskoo Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, je suis entrain d'apprendre le java. Pour m'entraîner un petit peu j'ai décidé de créer un marché où l'on peut "acheter" différents fruits, BREF. Quand j'écris dans la console "oui", le programme m'envoie directement au ELSE comme si j'avais pas respecté la condition du IF



Je ne comprends pas pourquoi le programme esquive le IF alors que je mets la bonne valeur...
Voilà merci de votre aide!





Configuration: Windows / Firefox 95.0
A voir également:

2 réponses

Utilisateur anonyme
 
Bonjour

pour poster un code, il faut faire comme décrit sur ce petit tuto (à lire attentivement)
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
sofskoo Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Ok merci!
Je vais refaire un autre post alors
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

"Je ne comprends pas pourquoi le programme esquive le IF alors que je mets la bonne valeur."
Il ne faut jamais comparer la valeur de deux objets avec l'opérateur
==
qui compare uniquement leurs références, pas leur contenu.

String Reponse= clavier.next();
if (Reponse == "oui")

Il est impossible que cela soit vrai, l'objet qui est lu par le clavier est construit à la volée, ça ne peut donc pas être le même objet que celui qui est chargé dans le code, même s'ils ont la même valeur.

Pour comparer la valeur de deux objets il faut utiliser la méthode equals :
if (Reponse.equals("oui"))

Mais attention : "oui" ce n'est pas égal à "OUI", dans le cas spécifique de la classe String on pourrait utiliser equalsIgnoreCase pour que "oui" ou "OUI" soient acceptés :
if (Reponse.equalsIgnoreCase("oui"))
0
sofskoo Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Ok donc si je comprends bien, == c'est que pour les valeurs qui sont déjà écrites dans le programme et equals() c'est pour les valeurs écrite au moment même c'est ça?

Mais un tout grand merci à toi pour ton aide!!
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > sofskoo Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
== c'est que pour les valeurs
Non, pas les valeurs, les références. C'est à dire l'adresse mémoire de l'objet.
On peut savoir que deux objets ont la même adresse mémoire grâce à == dans ce cas c'est exactement le même objet (et donc la même valeur).
Mais l'inverse est faux, deux objets peuvent avoir la même valeur, mais être enregistré dans deux objets différents, dans ce cas ils auront des références différentes.

Quant aux valeurs écrites au moment du programme, c'est spécifique à la classe String. Il y a un système de cache qui fait que toutes les chaînes de caractères stockées en dur dans le code sont enregistrés au même endroit pour économiser de la mémoire afin qu'il n'y ait qu'un seul objet par valeur différente.
0