Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de boucle avec un scanner

Sujet résolu
    19 novembre 2017 à 16:39:20

    Bonjour,

    Je suis en train de faire une fonction qui va servir d'authentification comme base. Le problème est dans la boucle while.

    Voici le programme sur lequel je programme

    import java.util.*;
    import java.io.*;
    static void menuPricipal2()
    {
            System.out.println("Bonjour, vous venez de vous connecter à votre ordinateur.");
    	System.out.println("Veuillez saisir votre login et votre mot de passe.");
            Scanner sc=new Scanner(System.in);
    	Scanner sc2=new Scanner(System.in);
    	System.out.print("Login: ");
    	String login=sc.nextLine();
    	System.out.print("Mot de passe: ");		
    	String mdp = sc2.nextLine();
    		
    	while(login!="Med1"&&mdp!="mdp")
    	{
    		System.out.println("Vous vous êtes trompé dans l'identification.");
    		System.out.println("Veuillez saisir votre login et votre mot de passe.");
    		System.out.print("Login: ");
    		login=sc.nextLine();
    		System.out.print("Mot de passe: ");	
    		mdp=sc2.nextLine();
    	}
    	if(login=="Med1"&&mdp=="mdp")
    	{
    		System.out.println("Bonjour Dr Claude");
    	}
    		
    }

    Le problème est que je reste dans la boucle while. Je ne passe pas du tout au if (même en mettant les identifiants bons). J'ai essayé de faire une copie du if dans la boucle while ou bien de faire un do while à la place du while, mais rien n'y fait.

    J'ai même essayé de faire ceci:

    while(true)
    {
            if(login!="Med1"&&mdp!="mdp")
            {
    		System.out.println("Vous vous êtes trompé dans l'identification.");
    		System.out.println("Veuillez saisir votre login et votre mot de passe.");
    		System.out.print("Login: ");
    		login=sc.nextLine();
    		System.out.print("Mot de passe: ");	
    		mdp=sc2.nextLine();
    	}	
    }
    if(login=="Med1"&&mdp=="mdp")
    {
    	System.out.println("Bonjour Dr Claude");
    }

    Mais le programme me dit d'enlever le if. Or je voudrai sortir de cette boucle lorsque le login et le mdp correspondent.

    Pour moi, la fonction me semble logique. Est-ce que quelqu'un peut m'indiquer ce qui ne va pas, s'il vous plaît?

    Merci de votre réponse,

    Cordialement,

    Gwenalizée

    EDIT

    Finalement, j'ai trouvé. Je poste juste la boucle while

    while(!login.equals("Med1") && !motdp.equals("mdp"))
    		{
    			System.out.println("Vous vous êtes trompé dans l'identification.");
    			System.out.println("Veuillez saisir votre login et votre mot de passe.");
    			System.out.print("Login: ");
    			login=sc.nextLine();
    			System.out.print("Mot de passe: ");
    			motdp=sc2.nextLine();			
    		}
    		if(login.equals("Med1") && motdp.equals("mdp"))
    		{
    			System.out.println("Bonjour Dr Claude.");
    		}

    Lorsqu'on utilise des String avec les Scanner, il faut absolument utiliser les fonctions equals, le "==" ne marche pas.

    Bon courage à ceux qui seront dans le même problème! La solution est dans ce post.

    Gwenalizée



    -
    Edité par Gwenalizée 19 novembre 2017 à 17:09:38

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2017 à 17:49:54

      Coucou toi :)

      Ce n'est pas que avec la classe Scanner, c'est partout avec la classe String

      le == permet de comparer des types primitifs (int, char, float, boolean, etc...) par la référence

      tandis que le equals compare un peu n'importe quoi (au hasard String, tu sais tous les classes qui commence par une Maj :) ) par la valeur de l'objet

      Si j'ai fait une faute, engueule moi cher voisin du dessous <3

      Bye :') Tats

      • Partager sur Facebook
      • Partager sur Twitter
      Un petit étudiant chinois perdu ^^'
        19 novembre 2017 à 18:03:03

        Merci du petit rappel @Tats'Yako^^

        J'avais oublié ce détail qui tue et qui peut te donner des heures et des heures de frustration!

        • Partager sur Facebook
        • Partager sur Twitter
          19 novembre 2017 à 18:17:55

          Tats'Yako a écrit:


          Si j'ai fait une faute, engueule moi cher voisin du dessous <3


          Salut. Ok, j'y vais...non je ne vais pas t’engueuler :lol:. Les types primitifs sont comparés par valeur quand on utilise == ;).
          • Partager sur Facebook
          • Partager sur Twitter
            21 novembre 2017 à 1:49:07

            Bonjour je suis entrain de faire un programme en java sur client/serveur , je veux quand le client veut se deconnceter qu'il envoye un message au serveur tel que "FIN"  j'ai tout fait vraiment aidez moi s'il vous plait voilà le code coté client:

            import java.io.BufferedReader;  

            import java.io.IOException;  

            import java.io.InputStreamReader;  

            import java.io.PrintStream;  

            import java.net.Socket;   

            import java.util.Scanner;

            public class ClientServeur {  

                public static void main(String[] args) throws IOException {  

                        Socket client = new Socket("127.0.0.1", 2050);   

                        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));                

                        PrintStream out = new PrintStream(client.getOutputStream());                

                        BufferedReader buf =  new BufferedReader(new InputStreamReader(client.getInputStream()));  

                        new Thread(new ClientRecois(buf)).start(); 

                        boolean flag = true;  

                        while(flag){  

                            String s = input.readLine();                    

                            out.println(s); 

                        }

                        input.close();

                        out.close();

                client.close(); 

            }

            }  

            voilà Echothread

            import java.io.BufferedReader;  

            import java.io.InputStreamReader;  

            import java.io.PrintStream;  

            import java.net.Socket;

            public class EchoThread implements Runnable {  

                private Socket client = null;   

                public EchoThread(Socket client){  

                    this.client = client;  

                }       

                public void run() {  

                    try{  

                        PrintStream out = new PrintStream(client.getOutputStream());              

                        BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));  

                        Utilisateur utilisateur = new Utilisateur();

                        boolean flag1 =true;

                        boolean flag2 =true;

                        while(flag1){  

                            String str =  buf.readLine();

                            String[] strs = str.split("\\ ");

                       if(strs[0].equals("I'm")) {

                       String username = strs[1];

                       utilisateur = newUtilisateur(username);

                       System.out.println(" connected success "+ strs[1]);

                       while(flag2) {

                       String str1 =  buf.readLine();

                            String[] str2 = str1.split("\\ ");

                            if(str2[0].equals("ANNONCE")) {

                           ajouteAnn(utilisateur.getUser_name(),str1);

                            }else if(str2[0].equals("MESSAGE")) {

                           ajouteMessage(utilisateur.getUser_name(),str1);

                            }else if(strs[0].equals("TOUSANNS")) {

                           out.println(getToutAnnonces());

                            }else if(str1.equals("PARTIR")) {

                           flag2=false;

                           flag1=false;

                           //out.println(getToutAnnonces());

                            }else {

                           System.out.println(str1);

                           //out.println("I can't understand");

                            }

                       }

                       }else {

                       out.println("The format is : 'I'm username'");

                       }

                        }

                        out.close();

                        client.close();

                    }catch(Exception e){  

                        e.printStackTrace();  

                    }

                }

                public Utilisateur newUtilisateur(String nom) {

               Utilisateur utilisateur = new Utilisateur();

               utilisateur.setUser_name(nom);

               Contenant .getUtilisateurs().add(utilisateur);

               return utilisateur;

                }

                public String getToutAnnonces() {

               String all ="";

               for(int i=0;i<Contenant .getAnns().size();i++) {   

               all+=((Annonce) Contenant .getAnns().get(i)).getUser_name() +","+((Annonce) Contenant .getAnns().get(i)).getDate_article()+","+((Annonce) Contenant .getAnns().get(i)).getName_article()+","+((Annonce) Contenant .getAnns().get(i)).getPrix_article();

               if(i!=Contenant .getAnns().size()-1)

               all+=" | ";

               }

               return all;

                }    

                public void ajouteAnn(String username,String str) {

               Annonce ann = new Annonce();

               String[] strs = str.split("\\ ");

               ann.setUser_name(username);

               ann.setName_article(strs[1]);

               ann.setPrix_article(strs[2]);

               ann.setDate_article(strs[1]);

               Contenant .getAnns().add(ann);

                }

                public void ajouteMessage(String fromName , String str) {      

               String[] strs = str.split("\\ ");

               Message message = new Message();

               message.setFromName(fromName);

               message.setToName(strs[1]);

               message.setText(strs[2]);

               Contenant .getMes().add(message);

                }

            }

            voilà le coté serveur
            import java.net.ServerSocket;  
            import java.net.Socket;  
            public class Serveurclient {  
                public static void main(String[] args) throws Exception{  
                    ServerSocket server = new ServerSocket(2050);  
                    Socket client = null;  
                    boolean flag = true;  
                    while(flag){  
                        client = server.accept();  
                        new Thread(new EchoThread(client) ).start(); 
                    }  
                    server.close();  
                }  
            • Partager sur Facebook
            • Partager sur Twitter

            Problème de boucle avec un scanner

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown