Question

Dans « Perles de programmation » j'ai rencontré le problème suivant. La question est la suivante: « Les mots d'impression en ordre décroissant de fréquence ». Si je comprends bien ce problème est. Supposons qu'il y ait un tableau de chaîne donnée, Appelons-s (paroles que je choisis au hasard, il n'a pas d'importance),

String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};

On voit que la chaîne « chat » se produit 4 fois, « renard » 3 fois et « chien » 2 fois. Ainsi, le résultat souhaité sera ceci:

cat
fox
dog

J'ai écrit le code suivant en Java:

import java.util.*;
public class string {
   public static void main(String[] args){
      String s[]={"fox","cat","cat","fox","dog","cat","fox","dog","cat"};
      Arrays.sort(s);
      int counts;
      int count[]=new int[s.length];
      for (int i=0;i<s.length-1;i++){
         counts=1;
         while (s[i].equals(s[i+1])){
            counts++;
         }
         count[i]=counts;
      }
   }
}

J'ai trié le tableau et créé un tableau de comptage où j'écris le nombre d'occurrences de chaque mot dans la matrice.

Mon problème est que en quelque sorte l'indice de l'élément de tableau entier et l'élément de tableau de chaînes n'est pas la même chose. Comment puis-je imprimer des mots en fonction des éléments maximum du tableau entier?

Était-ce utile?

La solution

Pour garder une trace du nombre de chaque mot, j'utiliser une carte qui associe un mot à nombre actuel de lui.

String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};

Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : s) {
    if (!counts.containsKey(word))
        counts.put(word, 0);
    counts.put(word, counts.get(word) + 1);
}

Pour imprimer le résultat, passez par les clés de la carte et obtenir la valeur finale.

for (String word : counts.keySet())
    System.out.println(word + ": " + (float) counts.get(word) / s.length);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top