0

配列の要素を数えるプログラムを作りました。動作しますが、プログラムに一種のエラーがあります。

プログラムの出力を次のようにしたい:
1 回発生: 2 回
2 回発生: 1 回
3 回発生: 1 回
6 回発生: 1 回

しかし、私のプログラムはこれの出力を与えます:
1 発生: 1 回
1 発生: 2 回
2 発生: 1 回
3 発生: 1 回
6 発生: 1 回

String[] values= {"1", "1", "3", "6", "2"};
int[] counts = new int[values.length]; 
Arrays.sort(values);
int temp = 0;
int c = 0;
for(int i = 0; i < values.length; i++){
  counts[i] = Integer.parseInt(values[i]);
  for(int j = 0;j < counts.length; j++) {
    if(counts[i] == counts[j]) {
      c++;
    }
  }
  System.out.println(counts[i] + " occured: " + c +" times");
  c = 0;
}
4

4 に答える 4

1

ApacheCollectionUtilsには、dasblinkenlight のアプローチに似た組み込みのユーティリティ メソッドがあります。

Map<String, Integer> counts = 
    CollectionsUtils.getCardinalityMap(Arrays.asList(values));
for (Map.MapEntry<String,Integer> entry : counts) {
    System.out.println(entry.getKey() + " - " + entry.getValue());
}

編集:
古い回答を更新しています。Java 8 ストリームには、これに相当するものが組み込まれています。

Map<Stirng, Long> = 
    Arrays.stream(values)
          .collect(Collectors.groupingBy(Function.identity(), 
                   Collectors.counting()));
于 2013-09-26T15:17:02.120 に答える