Wortfrequenz in Programming Pearls
-
02-10-2019 - |
Frage
"Programming Pearls" Ich habe folgendes Problem erfüllt. Die Frage lautet: „print Worte in abnehmender Häufigkeit“. Wie ich Problem zu verstehen, ist dies. Angenommen, es gibt eine bestimmte String-Array, nennen wir es s
(Worte, die ich zufällig gewählt haben, es spielt keine Rolle),
String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};
Wir sehen, dass string „cat“ 4-mal auftritt, „Fuchs“ 3-mal und „Hund“ 2 mal. So das gewünschte Ergebnis wird dies sein:
cat
fox
dog
Ich habe den folgenden Code in Java geschrieben:
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;
}
}
}
Ich habe das Array sortiert und eine Zählung Array erstellt, wo ich die Anzahl der Vorkommen jedes Wortes in Array schreiben.
Mein Problem ist, dass irgendwie der Index des Integer-Array-Elements und das String-Array-Elements ist nicht das gleiche. Wie kann ich also nach den maximalen Elementen des Integer-Array drucken?
Lösung
Für eine Übersicht über die Zählung jedes Wortes, würde ich eine Karte verwenden, die ein Wort abbildet, um es den aktuellen Zählerstand.
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);
}
Um das Ergebnis zu drucken, die Schlüssel in der Karte durchlaufen und den Endwert erhalten.
for (String word : counts.keySet())
System.out.println(word + ": " + (float) counts.get(word) / s.length);