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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top