Boucle while, mauvaise utilisation

Résolu/Fermé
Edgar Moerman - 7 sept. 2017 à 20:31
 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 ^^

3 réponses

NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
7 sept. 2017 à 20:43
Quel message d'erreur ?
0
Edgar Moerman
7 sept. 2017 à 20:46
Il me demande de donné une valeur à la variable "mdp" sauf que je voudrais la saisir après au clavier
Merci
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
7 sept. 2017 à 20:48
Donnes-lui une valeur par défaut différente de celle attendu.
0
Edgar Moerman
7 sept. 2017 à 20:49
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
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
Modifié le 7 sept. 2017 à 21:51
Oui, tu boucle tant que le MDP est bon ...
0
Edgar Moerman
7 sept. 2017 à 22:07
Je voudrais bouclé quant il n'est pas bon justement :/
0
Edgar Moerman
7 sept. 2017 à 22:09
J'ai ecrit "equals" mais il n'y à pas genre "unequals" ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
7 sept. 2017 à 22:40
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
Edgar Moerman
7 sept. 2017 à 22:56
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
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
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.
0
Edgar Moerman
7 sept. 2017 à 23:38
Super, tout compris, merci bcp :)
0