Boucle while, mauvaise utilisation

Résolu
Edgar Moerman -  
 Edgar Moerman -
Bonjour, je suis en train d'apprendre le code java et j'ai écrit un code sur eclipse, il ne me signal une erreur que je ne comprend pas.

Voici le code en question:

import java.util.Scanner;

public class testwhileperso {
public static void main(String[] arg) {

String mdp;
Scanner sc = new Scanner(System.in);

while (mdp.equals("azerty")) //L'erreur est là <--
{
System.out.println("Mot de passe : ");
mdp = sc.nextLine();

System.out.println("Mot de passe non valide...");
}

System.out.println("Mot de passe valide...");
}
}

Alors que si j'utilise la condition "if" cette même ligne ne contiens pas d'erreur
Merci à vous pour votre aide,
Je pense que KX va répondre comme c'est son taf le java ^^

3 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Quel message d'erreur ?
    0
  2. Edgar Moerman
     
    Il me demande de donné une valeur à la variable "mdp" sauf que je voudrais la saisir après au clavier
    Merci
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Donnes-lui une valeur par défaut différente de celle attendu.
      0
    2. Edgar Moerman
       
      Ok, je viens de faire comme tu ma dit, mais je ne rentre pas dans la boucle, je passe directement à "Mot de passe valide..."
      0
    3. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Oui, tu boucle tant que le MDP est bon ...
      0
    4. Edgar Moerman
       
      Je voudrais bouclé quant il n'est pas bon justement :/
      0
    5. Edgar Moerman
       
      J'ai ecrit "equals" mais il n'y à pas genre "unequals" ?
      0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Le mieux dans ton cas est d'utiliser une boucle do/while, ça t'évite la première initialisation qui ne sert à rien.

    Mais sinon pour utiliser la négation d'une condition tu as l'opérateur
    !
    (prononcer "not" ou "pas")

    do { 
        System.out.println("Mot de passe : "); 
        mdp = sc.nextLine(); 
    } while (!mdp.equals("azerty"));
    0
    1. Edgar Moerman
       
      Ah, voilà un code qui marche x) merci, je me demandais comment faire cette inéquation, merci.
      Je ne comprend pas, la première initialisation ? dans le cas ou je veux rédiger mon code avec while et non do/while comment devrais-je mis prendre ?
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Si tu prends ton code de départ, Eclipse te souligne en rouge
      mdp.equals("azerty")
      en te disant que
      mdp
      n'est pas initialisé, c'est à dire qu'il n'a pas de valeur.
      Il faut lui en donner une (n'importe laquelle sauf "azerty") pour pouvoir évaluer une première fois ta condition de boucle.

      String mdp = "inutile";
      while (!mdp.equals("azerty")) {

      Cela va donc faire un calcul inutile vu que l'on sait très bien que la condition sera toujours fausse la première fois... D'où l'intérêt du do/while qui n'évalue la condition qu'après avoir fait tourner la boucle au moins une fois.
      0
    3. Edgar Moerman
       
      Super, tout compris, merci bcp :)
      0