Signaler

Boucle while, mauvaise utilisation [Résolu]

Posez votre question Edgar Moerman - Dernière réponse le 7 sept. 2017 à 23:38 par 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 ^^
Utile
+0
plus moins
Quel message d'erreur ?
Donnez votre avis
Utile
+0
plus moins
Il me demande de donné une valeur à la variable "mdp" sauf que je voudrais la saisir après au clavier
Merci
NHenry 13903Messages postés vendredi 14 mars 2003Date d'inscription ModérateurStatut 22 septembre 2017 Dernière intervention - 7 sept. 2017 à 20:48
Donnes-lui une valeur par défaut différente de celle attendu.
Répondre
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..."
Répondre
NHenry 13903Messages postés vendredi 14 mars 2003Date d'inscription ModérateurStatut 22 septembre 2017 Dernière intervention - 7 sept. 2017 à 21:51
Oui, tu boucle tant que le MDP est bon ...
Répondre
Edgar Moerman- 7 sept. 2017 à 22:07
Je voudrais bouclé quant il n'est pas bon justement :/
Répondre
Edgar Moerman- 7 sept. 2017 à 22:09
J'ai ecrit "equals" mais il n'y à pas genre "unequals" ?
Répondre
Donnez votre avis
Utile
+0
plus moins
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"));
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 ?
Répondre
KX 14794Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 20 septembre 2017 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.
Répondre
Edgar Moerman- 7 sept. 2017 à 23:38
Super, tout compris, merci bcp :)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !