Adloun

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 SESAME et sesame (avec des espaces) ?

Corrigé

  • Le programme affiche Accès refusé. La chaîne saisi, construite par nextLine à 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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →