Вопрос

В «Программировании жемчуга» я встретил следующую проблему. Вопрос в следующем: «печатные слова в порядке уменьшения частоты». Насколько я понимаю, проблема в этом. Предположим, есть заданный массив строк, давайте назовем это s (Слова, которые я выбрал случайным образом, это не имеет значения),

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

Мы видим, что строка «кошка» встречается 4 раза, «лиса» 3 раза и «собака» 2 раза. Таким образом, желаемый результат будет следующим:

cat
fox
dog

Я написал следующий код на 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;
      }
   }
}

Я отсортировал массив и создал массив подсчета, где я пишу количество случаев каждого слова в массиве.

Моя проблема заключается в том, что каким -то образом индекс элемента целочисленного массива и элемента массива строк не тот же. Как я могу печатать слова в соответствии с максимальными элементами целочисленного массива?

Это было полезно?

Решение

Чтобы отслеживать подсчет каждого слова, я использовал бы карту, которая отображает слово с текущим количеством.

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

Чтобы распечатать результат, пройдите ключи на карте и получите окончательное значение.

for (String word : counts.keySet())
    System.out.println(word + ": " + (float) counts.get(word) / s.length);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top