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 :

Problème dans la méthode indexOf()?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de menoulette
    Inscrit en
    Août 2009
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 320
    Par défaut Problème dans la méthode indexOf()?
    Bonsoir à vous tous

    J'ai un petit tp à réaliser il s'agit d'établir un programme qui peut compter le nombre d'occurence d'un mot dans une chaine de caractère ..mais là je n'arrive pas à comprendre comment que la méthode indexOf() fonctionne c'est pour ca que j'ai un problème avec ce programme qui n'affiche pas le resultat juste ..quelqu'un pourra m'aider à trouver le problème et m'expliquer comment cette dernière fonctionne merci d'avance le voici le 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
     
     
    import javax.swing.JOptionPane;
     
    public class Occurence {
    public static int NbrFois(String chaine,String mot){
    	int cmpt=0;int i=0;
    	while(i<chaine.length())
     
    		{
    		if (chaine.indexOf(mot, i)!=-1){
    		cmpt++;
    		}
    		i=i + (mot.length());
     
    		chaine=chaine.substring(i);
     
    		}
     
    	return cmpt;
    }
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		 String chaine= JOptionPane.showInputDialog(null,"donner votre phrase");if (chaine==null) JOptionPane.showMessageDialog(null,"la chaine est vide");
    		 String mot= JOptionPane.showInputDialog(null,"donner le mot à rechercher");if (mot==null)JOptionPane.showMessageDialog(null,"la chaine est vide");
    		int nbre=NbrFois(chaine,mot);
    		if(nbre!=0)
    		JOptionPane.showMessageDialog(null,"Le mot {"+mot+"} apparait "+ nbre+" fois");else JOptionPane.showMessageDialog(null,"le mot n'apparait pas dans la phrase");
     
     
     
    	}
     
    }
    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			i = i + (mot.length());
     
    			chaine = chaine.substring(i);
    D'un coté tu incrémentes l'index, de l'autre tu tronques la chaine. Forcément à un moment c'est plus bon...

    Tu n'as pas besoin de tronquer la chaine puisque tu gère déjà proprement l'index...


    a++

  3. #3
    Membre éclairé Avatar de menoulette
    Inscrit en
    Août 2009
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 320
    Par défaut
    Salut merci pour votre réponse mais le programme toujours ne calcule pas juste

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Ah...

    Je n'avais pas vu que tu ne récupérais pas l'index trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( i = chaine.indexOf(mot, i) )!= -1) {
    a++

  5. #5
    Membre éclairé Avatar de menoulette
    Inscrit en
    Août 2009
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 320
    Par défaut
    Re :
    Même avec ce test là et ca ne marche plus ...je sais pas ou se trouve bien le problème

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Redonnes le code exact et les valeurs que tu utilises...

    a++

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Par défaut
    Bonjour,

    Ou alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while(i<chaine.length()){
                i = chaine.indexOf(mot);
                if(i != -1)
                //if(chaine.indexOf(mot, i)!=-1)
                {
                   cmpt++;
                   chaine=chaine.substring(i + (mot.length()));
                }
                //i=i + (mot.length());
     
                //chaine=chaine.substring(i);
     
             }
    Cordialement,

    Dan

  8. #8
    Membre éclairé Avatar de menoulette
    Inscrit en
    Août 2009
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 320
    Par défaut
    Citation Envoyé par danimo Voir le message
    Bonjour,

    Ou alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while(i<chaine.length()){
                i = chaine.indexOf(mot);
                if(i != -1)
                //if(chaine.indexOf(mot, i)!=-1)
                {
                   cmpt++;
                   chaine=chaine.substring(i + (mot.length()));
                }
                //i=i + (mot.length());
     
                //chaine=chaine.substring(i);
     
             }
    Cordialement,

    Dan
    Ohhh merci beaucoup an ca marche super bien youpiiii merci beaucoup

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Par défaut
    Il y a quand même encore une petite modif (while...) à faire car il ne faut pas que i + la longueur de la sous-chaîne dépasse la longueur de la chaîne:

    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
    //while(i<chaine.length())
             while(i + mot.length() <= chaine.length())
             {
                i = chaine.indexOf(mot);
                if(i != -1)
                //if (( i = chaine.indexOf(mot, i) )!= -1) // ok
     
                //if(chaine.indexOf(mot, i)!=-1) // pas ok
                {
                   cmpt++;
                   chaine=chaine.substring(i + (mot.length()));
                }
                //i=i + (mot.length());
     
                //chaine=chaine.substring(i);
     
             }
     
             return cmpt;
    Et il faut gérer les cas chaînes vides (try/catch) ...

    Dan

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

Discussions similaires

  1. Problème dans une méthode
    Par devhafid dans le forum Général Java
    Réponses: 5
    Dernier message: 25/01/2011, 20h07
  2. Où est le problème dans cette méthode ?
    Par Stéphane Bruckert dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 19/03/2009, 17h00
  3. [Méthode de tri][Arbre binaire] Problème dans l'ordre total
    Par jgavard dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 24/04/2007, 16h55
  4. Réponses: 3
    Dernier message: 14/04/2007, 16h06
  5. problème avec la méthode getElementById() dans Firefox
    Par matrouba dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 08h55

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