Domanda

In "Perle di programmazione" Ho incontrato il seguente problema. La domanda è questa: "Le parole di stampa in ordine decrescente di frequenza". A quanto ho capito problema è questo. Supponiamo che ci sia un dato array di stringhe, chiamiamolo s (parole che ho scelto a caso, non importa),

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

Si vede che stringa "gatto" si verifica 4 volte, "Fox" 3 volte e "cane" 2 volte. Così il risultato desiderato sarà questo:

cat
fox
dog

Ho scritto il seguente codice in 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;
      }
   }
}

Ho ordinato l'array e ha creato una matrice di conteggio dove scrivo il numero di occorrenze di ogni parola in serie.

Il mio problema è che in qualche modo l'indice dell'elemento dell'array intero e l'elemento di matrice stringa non è la stessa. Come posso stampare le parole secondo gli elementi massimi della matrice di interi?

È stato utile?

Soluzione

Per tenere traccia del conteggio di ogni parola, userei una mappa che traccia una parola per conteggio attuale esso è.

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);
}

Per stampare il risultato, passare attraverso le chiavi nella mappa e ottenere il valore finale.

for (String word : counts.keySet())
    System.out.println(word + ": " + (float) counts.get(word) / s.length);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top