質問

「プログラミングパール」では、次の問題を満たしました。問題は、「頻度を減らす順に単語を印刷する」ということです。私が理解しているように、問題はこれです。特定の文字列アレイがあるとしましょう、それを呼んでみましょう 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