前回の「出現回数マップ」をさらに発展させて、最頻値(もっとも多く出現した値) を求めるサンプルを紹介します。
サンプルコード:最頻値を求める
import java.util.*;
public class ModeSample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
System.out.println("整数をスペース区切りで入力してください(例: 10 20 30 20 10):");
String line = sc.nextLine();
// 入力を分割してリストに追加
String[] parts = line.split("\\s+");
for (String p : parts) {
try {
int n = Integer.parseInt(p);
numbers.add(n);
} catch (NumberFormatException e) {
System.out.println("数値に変換できません: " + p);
}
}
if (numbers.isEmpty()) {
System.out.println("有効な数値が入力されませんでした。");
return;
}
// 出現回数を数える Map
Map<Integer, Integer> countMap = new HashMap<>();
for (int n : numbers) {
countMap.put(n, countMap.getOrDefault(n, 0) + 1);
}
// 最頻値を探す
int mode = -1;
int maxCount = 0;
for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
if (entry.getValue() > maxCount) {
maxCount = entry.getValue();
mode = entry.getKey();
}
}
// 結果表示
System.out.println("入力された整数リスト: " + numbers);
System.out.println("出現回数マップ: " + countMap);
System.out.println("最頻値: " + mode + "(出現回数: " + maxCount + ")");
}
}
Java✅ 実行例
整数をスペース区切りで入力してください(例: 10 20 30 20 10):
30 10 20 10 40 20 10
入力された整数リスト: [30, 10, 20, 10, 40, 20, 10]
出現回数マップ: {20=2, 40=1, 10=3, 30=1}
最頻値: 10(出現回数: 3)
ポイント
- Map<Integer, Integer> で「値 → 出現回数」を管理
- 最頻値(mode) は「出現回数が最大のキー」
- 複数の値が同じ回数で最頻値になる場合は、最初に見つかったものを返す(必要ならリストで保持して複数返すことも可能)
👉 ここまでで「入力 → List → Map(出現回数) → 最頻値算出」まで一連の流れが完成しました。

