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 :

Méthode qui ne retourne pas la bonne valeur


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Méthode qui ne retourne pas la bonne valeur
    j'ai fait cette fonction afin de faire la recherche d'une chaine de charactères dans un tableau de chaine de charactères , s'il trouve la chaine il retourne l'indice dans le tableau ou il a trouvè la chaine

    voila 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
    public int recherche(String ph , String[]table){
            int ind=0;
            boolean trouve=false ;
            int i=0;
            while((i<table.length) && (trouve=false)){
                if (table[i]==ph){
                    ind=i;
                    trouve=true;
                    }
                    else i ++ ;
     
                }
                return ind ;
     
        }


    mais quand j'apelle cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String mot="ecrire";
    int y=recherche(mot,montable); // mon table est un tableau qui contient des 
                                                 //  chaines de charactères dont ecrire est 
                                                  // la 4eme position
    System.out.println(y);
    mais ca me retourne 0

    je crois le probleme est dans la fonction mais je ne l'ai pa trouvé
    J'en ai besoin dans mn projet

  2. #2
    Nouveau membre du Club
    Profil pro
    Doctorant en informatique théorique
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant en informatique théorique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 32
    Points
    32
    Par défaut
    Salut,

    Dans ton test du while, c est (trouve==false) et pas (trouve=false) qui est en fait une assignation de false a la variable trouve.

    A l'avenir utilise les balises de code (#) stp, et donne un titre plus explicite a ton post aussi, parce qu on se doute bien que tu as un problème avec Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 66
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Et si je peux me permettre dans ton while je mettrai pluton la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     while((i<table.length) && !trouve)
    Bon courage !!

    PS : N'oublie pas le mettre ton post à "Résolu" si ton problème est réglé

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    De plus, pour des comparaisons d'objets String, utilise la méthode equals() à la place de ==.

    == permet de voir l'égalité pour les types primitifs, mais pour les objets, permet de tester la référence.

    equals() permet de tester la valeur.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Hizin Voir le message
    De plus, pour des comparaisons d'objets String, utilise la méthode equals() à la place de ==.

    == permet de voir l'égalité pour les types primitifs, mais pour les objets, permet de tester la référence.

    equals() permet de tester la valeur.
    merciiii hizin c'etait ca le problème

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    en fait, j'ai remarquè q'il fallait pas recherhcer une seule chaine dans mon programme , il fallait parcourir 2 tableaux , et cherche pour chaque mot dans table1 si il se trouve dans table2 , s'il se trouve on met l'indice dans un autre tableau ind, sinon on continue a incrementer le table1 ..... enfain on retourne le table d'indice.
    mais j'ai trouvè un probleme:
    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
     
      public int[] recherche(String[]table1 , String[]table2){
            int s =table1.length;
            int []ind=new int[s];
            boolean trouve=false ;
     
            int i=0;
     
            for(i=0;i<s;i++){
     
                int j=0;
            while((j<table2.length) && (trouve==false)){
                if (table2[j].equals(table1[i])){
                    ind[i]=j;
     
                    trouve=true;
                     }
                    else j ++ ;
     
                }
                if(trouve==false){
                    System.out.println("le mot " +table1[i]+ "pas trouvè");
                }
     
                }
            return ind;
     
        }
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     int[]indices=recherche(listedemots,mots);
        for(int j=0;j<indices.length;j++){
        System.out.println(indices[j]);
        }
    mais dans l'execution , le tableau retourne seulement le bon resulta dans la 1er position(l'indice du mot trouvè) , et elle met des 0 0 0 ... pour les autres positions
    alors que normalement tous les chaines dans le tableau listedemots , sont trouvè dans le tableau mots

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Lorsque tu passe dans ton for pour la premiere fois et que tu trouve le mot, le booléen "trouve" passse a true, donc on sort de la boucle, et on passe a l'indice suivant. au second passage dans le for, ton booléen n'est pas réinitialisé donc il ne passe pas dans la boucle de recherche proprement dite.

    rajoute un trouve = false; apres ton int j=0;

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par MigouW Voir le message
    Lorsque tu passe dans ton for pour la premiere fois et que tu trouve le mot, le booléen "trouve" passse a true, donc on sort de la boucle, et on passe a l'indice suivant. au second passage dans le for, ton booléen n'est pas réinitialisé donc il ne passe pas dans la boucle de recherche proprement dite.

    rajoute un trouve = false; apres ton int j=0;
    merci , c'est bon j'ai fait comme tu me l'a dit .
    mais j'ai mis le cas ou un mot du table1 ( a la 3eme position ) ne se trouve pas dans table 2 , je veut qu'il laisse la casse vide ou a 0 dans table ind , l'important c'est que le tableau des indices continue a a voir les indices
    mais il me retourne cette fois les 2 premiers indices et le reste a 0 0 0 ... , alors que le 4eme , 5eme ... mot sont trouvés dans table 2.

  9. #9
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    J'ai testé le code, et je ne vois pas l'erreur, peux tu fournir les 2 tableaux s'il te plait ?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par MigouW Voir le message
    J'ai testé le code, et je ne vois pas l'erreur, peux tu fournir les 2 tableaux s'il te plait ?
    le premier table1 contient
    les
    chats
    boivent
    du
    lait
    .

    le 2eme table 2 contient :
    je
    tu
    les
    chats
    nous
    du
    moi
    lait
    .
    .
    .ect

    comme tu le remarque le 3eme mot dans le table1(boivent) n'est pas trouvè dans le table2.
    le resulta de l'execution
    2
    3
    0
    0
    0
    0

    danc ya un problem dans le cas ou il ne trouve pas le mot , il ne continue pas a chercher les autres mots !!

  11. #11
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Voila mon code d'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String [] listedemots = {"les","chats","boivent","du","lait"};
    		String [] mots = {"je","tu","les","chats","nous", "du","moi","lait"};
    		int[]indices=recherche(listedemots,mots);
    	    for(int j=0;j<indices.length;j++){
    	    	System.out.println(indices[j]);
    	    }
    et la méthode :

    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
    public static int[] recherche(String[]table1 , String[]table2){
    		int s =table1.length;
    		int []ind=new int[s];
    		boolean trouve=false ;
    		int i=0;
    		for(i=0;i<s;i++){
    			int j=0;
    			trouve=false ;
    			while((j<table2.length) && (trouve==false)){
    				if (table2[j].equals(table1[i])){
    					ind[i]=j;
    					trouve=true;
    				}
    				else j ++ ;
    			}
    			if(trouve==false){
    				System.out.println("le mot " +table1[i]+ "pas trouvè");
    			}
    		}
    		return ind;
    	}
    et un résultat egal à :
    2
    3
    0
    5
    7

    tu peux nous montrer ta méthode que tu as modifié précédement ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par MigouW Voir le message
    Voila mon code d'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String [] listedemots = {"les","chats","boivent","du","lait"};
    		String [] mots = {"je","tu","les","chats","nous", "du","moi","lait"};
    		int[]indices=recherche(listedemots,mots);
    	    for(int j=0;j<indices.length;j++){
    	    	System.out.println(indices[j]);
    	    }
    et la méthode :

    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
    public static int[] recherche(String[]table1 , String[]table2){
    		int s =table1.length;
    		int []ind=new int[s];
    		boolean trouve=false ;
    		int i=0;
    		for(i=0;i<s;i++){
    			int j=0;
    			trouve=false ;
    			while((j<table2.length) && (trouve==false)){
    				if (table2[j].equals(table1[i])){
    					ind[i]=j;
    					trouve=true;
    				}
    				else j ++ ;
    			}
    			if(trouve==false){
    				System.out.println("le mot " +table1[i]+ "pas trouvè");
    			}
    		}
    		return ind;
    	}
    et un résultat egal à :
    2
    3
    0
    5
    7

    tu peux nous montrer ta méthode que tu as modifié précédement ?
    je vais te copier directement tous ce qui a dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         for (  i=0 ; i<listedemots.length ; i++){
                  System.out.println(listedemots[i])  ;
                }
     
                for (  i=0 ; i<mots.length ; i++){
                  System.out.println(mots[i])  ;
                }
        int[]indices=recherche(listedemots,mots);
        for(int j=0;j<indices.length;j++){
        System.out.println(indices[j]);
        }
    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
    33
    34
    35
     
    public  int[] recherche(String[]table1 , String[]table2){
            int s =table1.length;
            int []ind=new int[s];
            boolean trouve=false ;
            try{
     
     
            int i=0;
     
            for(i=0;i<s;i++){
                trouve=false ;
                int j=0;
            while((j<table2.length) && (trouve==false)){
                if (table2[j].equals(table1[i])){
                    ind[i]=j;
     
                    trouve=true;
                     }
                    else j ++ ;
     
                }
                if(trouve==false){
                    System.out.println("le mot " +table1[i]+ "pas trouvè");
     
                }
                }
     
     
        }catch(java.lang.NullPointerException er){
            System.out.println(er.getMessage());
        }
            return ind;
     
        }
    j'ai mis try catch parcque lorsque sans celle ci , l'execution me sorte l'execption java.lang.nullpointerException
    sinon
    le resulta de l'execution de mon code:
    les
    chats
    Boivent
    le
    lait
    .


    la
    chien
    boire
    zied
    je
    tu
    il
    mange
    regarde
    va
    ecrit
    les
    .
    ?
    chats
    boivent
    !
    le
    lait
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    //null sont les places vides du table2 pas remplis

    11
    14
    0
    0
    0
    0


    bizareeeeeee

  13. #13
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    les nuls sont ton problème,
    lors de la recherche du 3e mot, tu parcours tout le tableau jusqu'au premier null,

    a ce moment la, lors de l'instruction : if (table2[j].equals(table1[i]))
    la NullPointerException se déclenche, est catchée, et on sort de la méthode recherche. du coup la recherche des autres mots n'est pas effectué.

    2 solutions :
    - ou tu remplis tout les null de table2 avec des chaines vides ""
    - ou alors tu fait le test de null avant l'autre condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (table2[j] != null && table2[j].equals(table1[i]))

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    attend je vais verifier

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par MigouW Voir le message
    les nuls sont ton problème,
    lors de la recherche du 3e mot, tu parcours tout le tableau jusqu'au premier null,

    a ce moment la, lors de l'instruction : if (table2[j].equals(table1[i]))
    la NullPointerException se déclenche, est catchée, et on sort de la méthode recherche. du coup la recherche des autres mots n'est pas effectué.

    2 solutions :
    - ou tu remplis tout les null de table2 avec des chaines vides ""
    - ou alors tu fait le test de null avant l'autre condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (table2[j] != null && table2[j].equals(table1[i]))
    ouiiiii c'etait bien ca le problemme, je te remerciie beucoup MigouW

  16. #16
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Pense au bouton Résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Execute_query ne retourne pas les bonnes valeurs
    Par complicated dans le forum Forms
    Réponses: 2
    Dernier message: 23/11/2011, 11h12
  2. Requete qui n'affiche pas les bonnes valeurs
    Par snips67 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/01/2010, 10h54
  3. fonction avec if sur input radio qui ne renvoie pas la bonne valeur
    Par eddflo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/06/2009, 01h20
  4. [SQL Server] select max ne retourne pas la bonne valeur
    Par *alexandre* dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/09/2008, 14h49
  5. Réponses: 19
    Dernier message: 12/12/2007, 09h10

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