CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Probléme

AESZ23
AESZ23
Niveau 9
25 septembre 2011 à 20:23:48

Bonjour à tous ! :)

J'ai tapé ce code java dans eclipse : J'ai taper ça : String prenom;
char reponse = 'O';
Scanner sc1 = new Scanner(System.in);
while (reponse == 'O')
{
System.out.println("Donnez un prénom : ");
prenom = sc1.nextLine();
System.out.println("Bonjour " +prenom+ ", comment vas-tu ?");
sc1.nextLine();
String sava = sc1.nextLine();
if (sava == "bien")
System.out.print("Alors tout va bien ! ");
else if (sava == "pas bien")
System.out.print("Alors repose toi et remet toi d'aplomb ! :)");
else
System.out.print("Je n'ai pas compris, désolé... ");

System.out.println("Voulez-vous réessayer ?(O/N)");
reponse = sc1.nextLine().charAt(0);
}

System.out.println("Au revoir.");

Et le problème, c'est que bien que je vide le scanner, chaque fois que je tape "bien" ou "pas bien", il se fout de ma condition et passe directement a l'else... :(

Donc, comment faire pour rétablir le tout ? :(

Merci d'avance ! :)

Silvermo
Silvermo
Niveau 26
25 septembre 2011 à 20:36:27

La comparaison d'objets de type String se fait par la méthode equals et non par le "=="

Silvermo
Silvermo
Niveau 26
25 septembre 2011 à 20:36:55

if (sava == "bien")
:d) Deviens :
if (sava.equals("bien"))

etc :)

Bunyan
Bunyan
Niveau 17
25 septembre 2011 à 20:52:45

En faisant en == comme ceci : "sava == "bien", tu compares les adresses mémoires de la variable "sava" et de là ou est stockée la String "bien".
Il est donc tout à fait normal que cela ne fonctionne pas.

Comme dit, pour comparer dans ce cas-là, tu dois utiliser "equals" (ainsi que pour la plupart de comparaison d'égalité entre deux objets). Tu as aussi la méthode "compareTo(unObjet)" qui peut t'intéresser.

AESZ23
AESZ23
Niveau 9
25 septembre 2011 à 21:08:11

Ok, merci beaucoup les gars, je comprenait pas et ça me bloquait ! :)

AESZ23
AESZ23
Niveau 9
25 septembre 2011 à 21:20:32

Sinon, je up car j'ai une autre question : Y a pas moyens de faire que en sorte que si on met pas la maj à "Bien", ça marche quand même ? Car faire pleins d'opérateur Or comme ça, c'est pas top niveaux optimisation... :(

Silvermo
Silvermo
Niveau 26
25 septembre 2011 à 21:22:33

Les librairies commons de apache sont tes amies :) :
http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/StringUtils.html

La classe utilitaire StringUtils propore des fonctions comme :
equalsIgnoreCase

qui fait comme le equals mais peu importe la Casse (càd peu importe les minuscules ou majuscules) :) et d'autres fonctions sympa comme :
StringUtils.isEmpty , pour être sûr de ne pas bosser avec des chaînes null ou vides

Silvermo
Silvermo
Niveau 26
25 septembre 2011 à 21:24:12

cette librairie de apache et de nombreuses autres sont fort utilisés en entreprise et dans de nombreux projets en général, car elles apportent de nombreuses fonctions que de toute façon les développeurs écriraient s'ils ne disposaient pas de la librairie.
on évite ainsi de réinventer la roue :) , en utilisant ce qui existe et qui fonctionne bien

AESZ23
AESZ23
Niveau 9
25 septembre 2011 à 21:36:38

Merci pour ton aide, mais je pense que je vais déjà me concentrer sur la librairie standard d'eclipse, sinon je suis pas dans la mer*e pour débuter... :hap:

Silvermo
Silvermo
Niveau 26
25 septembre 2011 à 21:38:25

librairie d'eclipse ? tu veux dire de Java, Eclipse étant juste un gros éditeur de texte bourré de plug in utiles mais dont le trop grand nombre rend l'EDI parfois instable :p

Silvermo
Silvermo
Niveau 26
25 septembre 2011 à 21:39:59

Sinon ben tu peux toujours créer ta propre fonction de comparaison qui ne tient pas compte de la casse, en faisant appel aux fonctions toLowerCase() de la classe String :) de Java par exemple.

http://download.oracle.com/javase/6/docs/api/java/lang/String.html

Bunyan
Bunyan
Niveau 17
26 septembre 2011 à 09:05:39

La documentation est ton amie, elle ne mord pas, n'as pas besoin d'être nourrie et est relativement claire.

Sinon, pas besoin d'aller chercher dans commons.apache.
equalsIgnoreCase(String) est une méthode de la classe String.
Eclipse aurait normalement dû te la proposer en auto-complétion au même titre que equals normalement.

Lien : http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#equalsIgnoreCase%28java.lang.String%29

Silvermo
Silvermo
Niveau 26
26 septembre 2011 à 18:20:23

Le seul avantage de apache commons est de ne pas lancer d'exception si un des deux paramètres est null.
Exemple :
variable.equalsIgnoreCase("aaa")
lance une exception si variable est null.
A la différence de StringUtils :)
Bref ça permet d'éviter un test supplémentaire

Bunyan
Bunyan
Niveau 17
26 septembre 2011 à 22:46:40

Ou simplement de faire :
"aaa".equalsIgnoreCase(uneAutreString);

Pas besoin de tester null dans ce cas, car la méthode le fait toute seule. :)

Silvermo
Silvermo
Niveau 26
27 septembre 2011 à 07:21:30

non , car appeler une méthode sur un objet dont la référence est null va jeter une exception, ce qui oblige à tester si la valeur est null, ou à catcher l'exception, alors qu'on veut juste savoir au final si deux chaines sont équivalentes :)
Bref d'où ma préconisation de StringUtils :p

Silvermo
Silvermo
Niveau 26
27 septembre 2011 à 07:22:18

Je parle bien d'appeler une méthode d'un objet null , pas appeler une méthode avec en argument un objet null :)

Silvermo
Silvermo
Niveau 26
27 septembre 2011 à 07:31:29

Mais soit, je crois que le problème de l'auteur devrait être réglé depuis :p

Bunyan
Bunyan
Niveau 17
27 septembre 2011 à 08:16:37

J'en conviens bien, et suis bien d'accord, mais peux-tu me dire comment :
"aaa".equalsIgnoreCase(uneAutreString);
peux lever une NPE ? ^^"

Tu peux tester, cela n'en lève absolument pas.
Tu appel ta méthode sur l'objet "aaa", qui ne peux pas être nul, et les méthodes equals test en premier lieu la nullité et l'égalité des adresses mémoires avant de tester le reste.

Sinon, oui, il a sans doute obtenu sa réponse :)

Silvermo
Silvermo
Niveau 26
27 septembre 2011 à 17:51:28

Non, tu m'as mal compris, je dis que StringUtils est à préconiser car il gère tous les cas (argument null ainsi que le cas où l'objet dont on invoque la méthode est null)

Bref ce n'est pas pour rien que StringUtils a été créé, cette classe utilitaire évite bien des casses tête dans la résolution de problèmes qui n'auraient pas lieu d'être juste pour une comparaison.

Et si elles sont si utilisées, ce n'est pas que pour cette fonction mais pour bien d'autres que l'API standard n'offre pas.

Enfin voilà :) , bref je préfère utiliser StringUtils, il faut dire que je l'utilise dans bien des cas (les méthodes isEmpty, is Blank, equalsIgnoreCase, etc)

Bunyan
Bunyan
Niveau 17
27 septembre 2011 à 20:17:12

Je t'ai bien compris :)

Juste que je ne vois pas l'intérêt d'utiliser StringUtils dans le cas d'une utilisation de "equals" (ou de "equalsIgnoreCase").

Après, je ne la connais pas, et je ne vais pas oser émettre un jugement, cela serait débile :)

Elle doit avoir une utilité, je ne le conteste pas non plus, sinon, elle n'existerai pas.

Je vais me renseigner dessus quand même, ça fait toujours ça de connaissance en plus :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment