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

Java Discussion :

Afficher le nombre d’occurrences des mot d'un texte sans utiliser les collections


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut Afficher le nombre d’occurrences des mot d'un texte sans utiliser les collections
    Bonjour,
    je suis débutant en programmation Java, j'ai une question qui concerne un programme permettant de renvoyer les mots présents dans un texte ainsi que leurs occurrences, en les triant par ordre décroissant; mon code est le suivant :
    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
    package entrainementTPNote2;
     
    import java.util.Arrays;
     
    public class UtilisationCollections {
    	static String texte = "bonjour je m'appelle gabriel enriquez et je suis"
    			+ " très nul en java et en programmation en général en général";
     
    	public static void main(String[] args) {
    		TableauDeMots();
    	}
     
    	public static void TableauDeMots() {
    		String[] TableauDeMots = texte.split(" ");
    		System.out.println(Arrays.toString(TableauDeMots));
    		int[] cpt = new int[TableauDeMots.length];
    		for (int k = 0; k < TableauDeMots.length; k++) {
    			cpt[k] = 1;
    			for (int j = k+1; j < TableauDeMots.length; j++) {
    				if ((String)TableauDeMots[j] == (String)TableauDeMots[k]) {
    					cpt[k]++;
    					cpt[j]=0;
    				}
    			}
    		}
    		Arrays.sort(cpt);
    		for (int i = 0; i < cpt.length; i++) {
    			if (cpt[i] != 0) {
    				System.out.println("Le mot " + TableauDeMots[i] + " est répété " + cpt[i] + " fois");
    			}
    		}
    	}
    }
    Le problème est que quand j’exécute le programme, il affiche dans la console :
    [bonjour, je, m'appelle, gabriel, enriquez, et, je, suis, très, nul, en, java, et, en, programmation, en, général, en, général]
    Le mot bonjour est répété 1 fois
    Le mot je est répété 1 fois
    Le mot m'appelle est répété 1 fois
    Le mot gabriel est répété 1 fois
    Le mot enriquez est répété 1 fois
    Le mot et est répété 1 fois
    Le mot je est répété 1 fois
    Le mot suis est répété 1 fois
    Le mot très est répété 1 fois
    Le mot nul est répété 1 fois
    Le mot en est répété 1 fois
    Le mot java est répété 1 fois
    Le mot et est répété 1 fois
    Le mot en est répété 1 fois
    Le mot programmation est répété 1 fois
    Le mot en est répété 1 fois
    Le mot général est répété 1 fois
    Le mot en est répété 1 fois
    Le mot général est répété 1 fois;
    Il ne prend pas en compte le fait qu'il faille afficher le nombre d'occurrences de chaque mot et afficher chaque mot une seule fois.
    Pouvez-vous m'aider s'il vous plaît, merci d'avance pour votre réponse.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    ça doit être possible de t'aider, oui. Mais avant tout, il faudrait que tu nous expliques pourquoi ce programme donnerait le résultat que tu cherches à avoir. Il me semble, moi, que ce programme fait plutôt des choses qui ne peuvent pas donner le bon résultat.

    Avant de faire du code en Java ou autre chose, il faudrait donc d'abord que tu nous expliques comment tu comptes t'y prendre pour compter les mots.

    Une information importante cependant :

    En Java les String sont des objets, et on ne peut pas comparer les objets avec ==. Quand tu fais if ((String)TableauDeMots[j] == (String)TableauDeMots[k]) { ça ne peut pas marcher.

    Les objets doivent être comparés avec la méthode equals(), donc ce serait plutôt if (TableauDeMots[j].equals(TableauDeMots[k])) {.

    == sert à vérifier si deux variables pointent vers le même objet, ou si une variable est null. Pas à comparer les valeurs de deux objets, donc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    J'ai relu mon code et me suis rendu compte que ce n'était pas la bonne méthode pour effectuer la fonction que je voulais. J'ai donc changé mon plan de programme.
    Pour effectuer la fonction, je compte donc faire de la manière suivante:

    1)construire un tableau affichant tous les mots du texte, avec des emplacements correspondants à leur ordre dans le texte. Par exemple, "bonjour il fait" donnerait : [bonjour, il, fait].

    2)construire un compteur sous forme de tableau de la même taille que le précédent tableau, initialisé avec que des 1.

    3)parcourir 2 fois le tableau de mots crée dans la première étape(2 boucles for?), (la deuxième en excluant les éléments nuls) et, si on trouve qu'il existe plusieurs éléments de ce tableau ayant les mêmes valeurs, on ajoute (nombre de fois que ce mot est représenté dans le tableau-1) au compteur d'indice celui de la première apparition du mot dans le tableau de mots et on associe 0 aux suivants dans le tableau compteur.

    4)créer un tableau Tableau1 à deux dimensions avec une taille de : (taille du tableau compteur)en longueur sur (2)en largeur en mettant dans la première ligne les éléments du compteur et dans la deuxième, les éléments du tableau de mot correspondants cad aux mêmes indices.

    5)créer un nouveau tableau Tableau2 de dimension 2 de taille : (nombre d'éléments non nuls dans le tableau compteur) en longueur sur 2 en largeur qui va avoir dans sa première ligne : les éléments non nuls du tableau compteur et dans la deuxième ligne, les éléments du tableau de mots correspondants.

    6)trier la première ligne de Tableau2 par ordre croissant, et changer les éléments de la deuxième ligne correspondants.

    Que pensez-vous de ce plan?
    Est-il faisable?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Es-tu obligé de passer par des tableaux ou peux-tu utiliser autre chose ?

    Pour moi, le mieux serait d'utiliser une Map<String, Integer> où la clé correspond au mot et la valeur au compteur d'occurrence.
    Ça partirait d'une boucle sur les mots de ta phrase (via split(" ")) et ensuite, mot par mot, tu testes l'existance du mot dans la Map
    Si le mot existe, tu incrémentes le compteur
    Sinon, tu initialises la Map pour ton mot (clé) et la valeur 1 pour le compteur

    Ensuite, tu tries les clés de ta Map en fonction de ton besoin (on accède à la liste des valeurs clés par map.keySet())
    Et enfin, tu boucles sur ta liste de clés triées et tu recherches le compteur associé pour l'afficher
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Ce serait peut être plus facile en utilisant une Map<String, Integer>.

    Ensuite tu parcours mot a mot, et pour chaque mot, tu regarde si le mot existe comme clé de la map.

    Si oui alors tu prends la valeur que tu incrémente de 1.
    Si non alors tu rajoute une entrée dans la map avec comme valeur 1.

    Edit : Grillé par Obutterlin
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Par défaut
    En fait, c'est un exercice où on nous demande de compter le nombre d'occurrences de mots dans un texte par ordre croissant, d'abord sans utiliser les collections, puis en les utilisant, puis de comparer la complexité des 2 programmes, je n'en suis qu'au premier programme.

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ok, si c'est demandé... mais c'est plus compliqué

    Le problème vient du fait que tu ne peux pas dissocier le mot du compteur en raison du tri que tu dois faire.
    Une fois le tableau trié (que ce soit celui des mots ou celui des occurrences) les 2 tableaux n'ont plus de correspondance sur l'indice.

    Il faudra donc créer une classe pour "accumuler" les valeurs qui vont ensemble, en l'occurrence le mot et le compteur.
    Ensuite, quand tu trieras le tableau de cette classe, tu auras au même endroit le mot et son compteur
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2012, 18h00
  2. le nombre d'occurences des mots d'un texte
    Par hendrix67 dans le forum Langage
    Réponses: 3
    Dernier message: 19/05/2010, 09h39
  3. Label d'axe graphique: remplacer les nombres par des mots
    Par Chrysomallus dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/04/2007, 15h23
  4. Réponses: 6
    Dernier message: 20/07/2006, 11h25
  5. comment supprimer des mots d'un texte
    Par visteur dans le forum Langage
    Réponses: 3
    Dernier message: 16/03/2006, 15h11

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