Problème If Else
Fermé
sofskoo
Messages postés
3
Date d'inscription
mardi 4 janvier 2022
Statut
Membre
Dernière intervention
4 janvier 2022
-
4 janv. 2022 à 18:03
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 4 janv. 2022 à 20:11
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 4 janv. 2022 à 20:11
2 réponses
Utilisateur anonyme
4 janv. 2022 à 18:12
4 janv. 2022 à 18:12
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
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
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
4 janv. 2022 à 19:03
4 janv. 2022 à 19:03
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
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 :
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 :
"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"))
sofskoo
Messages postés
3
Date d'inscription
mardi 4 janvier 2022
Statut
Membre
Dernière intervention
4 janvier 2022
4 janv. 2022 à 19:14
4 janv. 2022 à 19:14
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!!
Mais un tout grand merci à toi pour ton aide!!
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
>
sofskoo
Messages postés
3
Date d'inscription
mardi 4 janvier 2022
Statut
Membre
Dernière intervention
4 janvier 2022
4 janv. 2022 à 20:11
4 janv. 2022 à 20:11
== 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.
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.
4 janv. 2022 à 19:02
Je vais refaire un autre post alors