programmation Java (école d'ingénieur) · Chapitre 6 · Application directe du cours
== ou equals ?
Chaînes de caractères et entrées · niveau 2
Énoncé
Le programme suivant doit autoriser l'accès quand on tape sesame. On le lance et l'on tape bien sesame.
import java.util.Scanner;
public class EgaliteBug {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String motDePasse = "sesame";
System.out.print("Mot de passe : ");
String saisi = sc.nextLine();
if (saisi == motDePasse) {
System.out.println("Accès autorisé");
} else {
System.out.println("Accès refusé");
}
}
}
- Qu'affiche-t-il ? Pourquoi ?
- Corriger le programme. Comment accepter aussi
SESAMEetsesame(avec des espaces) ?
Corrigé
- Le programme affiche
Accès refusé. La chaînesaisi, construite parnextLineà partir de ce qui a été tapé, est un objet distinct de la constante"sesame": elles ont le même contenu, mais==compare les références, qui diffèrent. - On compare les contenus :
if (saisi.equals(motDePasse)) { ... }
Pour accepter les variantes, on normalise la saisie avant de comparer :
if (saisi.trim().equalsIgnoreCase(motDePasse)) { ... }
(Pour un vrai mot de passe, on ne le ferait évidemment pas : la casse fait partie du secret.)
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.