IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Recherche dans une table : impossible de récupérer une saisie


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Recherche dans une table : impossible de récupérer une saisie
    Bonjour,

    J'aimerais solliciter votre aide pour résoudre un dysfonctionnement de mon code Java. Voici le résultat que je souhaite obtenir :

    1. L'utilisateur entre un prénom pour savoir si ce dernier figure dans un tableau (prédéfini dans le code).

    2. Si le résultat est positif, le script lui indique la position dans le tableau du prénom.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import java.io.*;
     
    class chap5_recherche {
      public static void main(String[] args) {
        String [] tab={"jean","pierre","paul","jack"};
        int i=0;
        String txt="";
        boolean trouve=false;
        BufferedReader saisie;
     
        saisie=new BufferedReader(new InputStreamReader (System.in));
        try{
          System.out.println("Entrez le prenom recherche :");
          txt=saisie.readLine();
        }
        catch (Exception excp) {
          System.out.println("Erreur");
        }
     
        while(i<tab.length && !trouve) {
        	    if(tab[i]==txt) trouve=true;
        	    i++;
        }
     
        if(trouve) System.out.println("Trouve a la position "+(i-1));
        else System.out.println("Ce nom ne figure pas dans la liste !");
      }
    }
    Lors de la compilation je n'ai pas d'erreur. Par contre, le script ne récupère pas ce que je saisi et me retourne à chaque fois "Ce nom ne figure pas dans la liste".

    Merci d'avance pour votre aide !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 265
    Points : 179
    Points
    179
    Par défaut
    Bonjour,

    tout d'abord ton if ne fonctionne pas, tu compares une chaine, tu récupères la valeur i en sortie de boucle et non la position dans le tableau du champ trouvé, et le "&& !trouve", à mon avis, ne sert pas à grand chose dans l'état.

    Peut être que cela peut t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (i < tab.length) {
        if (tab[i].equals(txt)){
            trouve = true;
    	break;
    	}
         i++;
    }
     
    if (trouve)
        System.out.println("Trouve a la position " + (i));

  3. #3
    Membre habitué Avatar de dev_2007
    Profil pro
    Inscrit en
    Août 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 98
    Points : 138
    Points
    138
    Par défaut
    Voila, ton code modifié et qui donne le résultat souhaité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    import java.io.*;
     
    class chap5_recherche {
      public static void main(String[] args) {
        String [] tab={"jean","pierre","paul","jack"};
        int i=0;
        String txt="";
        boolean trouve=false;
        BufferedReader saisie;
     
        saisie=new BufferedReader(new InputStreamReader (System.in));
        try{
          System.out.println("Entrez le prenom recherche :");
          txt=saisie.readLine();
        }
        catch (Exception excp) {
          System.out.println("Erreur");
        }
     
        while(i<tab.length && !trouve) {
        	    if(tab[i].equals(txt)){ 
        	    	trouve=true;
        	    break;
        	    }else
        	    	i++;
        }
     
        if(trouve) System.out.println("Trouve a la position "+(i));
        else System.out.println("Ce nom ne figure pas dans la liste !");
      }
    }
    Le principe est quasiment simple, dans ton while une fois tu trouve l'élément recherché alors tu mets ton boolean à true puiske quitter la boucle puiske ça ne sert à rien de continuer à chercher, d'ou le break.

    les tableaux sont indexés à partir de 0 donc ton (i-1) donnera toujours la position - 1 de ton élément dans la tableau si trouvé, d'ou aussi le i au lieu de i-1.

    voilou voilou.
    Cordialement,
    HEL
    __________________
    Tout d'abord le faire fonctionner , Ensuite qu'il soit rapide. Enfin le rendre agréable à utiliser.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos deux réponses ultra rapide ! C'est parfait.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 265
    Points : 179
    Points
    179
    Par défaut
    Et si vraiment tu tiens à utiliser "!trouve" dans le test, il te faudra réaffecter la valeur "false" à la variable "trouve" à un moment ou un autre.

    Quand au "else" dans la boucle, je ne suis pas trop sûr de sa raison d'être.

  6. #6
    Membre habitué Avatar de dev_2007
    Profil pro
    Inscrit en
    Août 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 98
    Points : 138
    Points
    138
    Par défaut
    déjà la variable trouve est bien initialisée au moment de sa déclaration à false
    Donc si le test abouti alors trouve aura comme valeur true si non il sera tout le temps à false.

    Pour le "else" je suis d'accord avec toi de sa présence puisque le break fait l'affaire au cas ou on rentre dans la boucle si non on incrémente le i pour passer à l'élément suivant.
    Cordialement,
    HEL
    __________________
    Tout d'abord le faire fonctionner , Ensuite qu'il soit rapide. Enfin le rendre agréable à utiliser.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 265
    Points : 179
    Points
    179
    Par défaut
    Citation Envoyé par dev_2007 Voir le message
    Donc si le test abouti alors trouve aura comme valeur true si non il sera tout le temps à false.
    Tout à fait, et comme dans l'exemple qu'il donne il ne rentre qu'une seule fois dans la boucle et que la valeur de "trouve" est à "false", nul besoin de tester cette valeur dans la condition "&& !trouve".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      while(i<tab.length) {
         if(tab[i].equals(txt)){ 
        	trouve=true;
        	 break;
           }
        i++;
        }
     
        if(trouve) System.out.println("Trouve a la position "+(i));

Discussions similaires

  1. [AC-2010] Impossible de supprimer une table, un formulaire ou une requête
    Par leonnikita dans le forum Access
    Réponses: 4
    Dernier message: 25/03/2014, 18h39
  2. Réponses: 16
    Dernier message: 20/05/2011, 20h12
  3. Réponses: 6
    Dernier message: 15/06/2010, 03h18
  4. [MySQL] Récupérer une table et redirection vers une page
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 20/03/2007, 16h44
  5. [MySQL] Recherche dans la table impossible
    Par tonguim dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/05/2006, 22h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo