Menu

Boucle while, mauvaise utilisation [Résolu]

Edgar Moerman - 7 sept. 2017 à 20:31 - Dernière réponse :  Edgar Moerman
- 7 sept. 2017 à 23:38
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 ^^
Afficher la suite 

Votre réponse

11 réponses

NHenry 14178 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 7 sept. 2017 à 20:43
0
Utile
Quel message d'erreur ?
Commenter la réponse de NHenry
Edgar Moerman - 7 sept. 2017 à 20:46
0
Utile
Il me demande de donné une valeur à la variable "mdp" sauf que je voudrais la saisir après au clavier
Merci
NHenry 14178 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 7 sept. 2017 à 20:48
Donnes-lui une valeur par défaut différente de celle attendu.
Ok, je viens de faire comme tu ma dit, mais je ne rentre pas dans la boucle, je passe directement à "Mot de passe valide..."
NHenry 14178 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 7 sept. 2017 à 21:51
Oui, tu boucle tant que le MDP est bon ...
Je voudrais bouclé quant il n'est pas bon justement :/
J'ai ecrit "equals" mais il n'y à pas genre "unequals" ?
Commenter la réponse de Edgar Moerman
KX 15438 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 7 sept. 2017 à 22:40
0
Utile
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"));
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 ?
KX 15438 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 7 sept. 2017 à 23:24
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.
Super, tout compris, merci bcp :)
Commenter la réponse de KX