Java | 複数の入力をまとめて List に格納するサンプル

Java Java
スポンサーリンク

前回の「最頻値(もっとも多く出た値)」を求めるサンプルを発展させて、複数の最頻値(同じ回数で並んだ値)をすべて求めるプログラムを紹介します。

サンプルコード:複数の最頻値を求める

import java.util.*;

public class MultiModeSample {
    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 maxCount = Collections.max(countMap.values());

        // 最頻値(複数ある場合はすべて)をリストに格納
        List<Integer> modes = new ArrayList<>();
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            if (entry.getValue() == maxCount) {
                modes.add(entry.getKey());
            }
        }

        // 結果表示
        System.out.println("入力された整数リスト: " + numbers);
        System.out.println("出現回数マップ: " + countMap);
        System.out.println("最頻値: " + modes + "(出現回数: " + maxCount + ")");
    }
}
Java

✅ 実行例

整数をスペース区切りで入力してください(例: 10 20 30 20 10):
10 20 30 20 10 30
入力された整数リスト: [10, 20, 30, 20, 10, 30]
出現回数マップ: {20=2, 10=2, 30=2}
最頻値: [20, 10, 30](出現回数: 2)

ポイント

  • Collections.max(countMap.values()) で最大出現回数を取得
  • その回数と同じ値をすべてリストに追加すれば「複数の最頻値」が求められる
  • 出現回数が同じ値が複数ある場合も正しく処理できる

発展アイデア

  • 出現回数順に並べ替えて「ランキング形式」で表示する
  • 最頻値が1つだけなら単独表示、複数ならリスト表示にする
  • TreeMap を使えばキーを昇順に並べた状態で最頻値を探せる

👉 ここまでで「入力 → List → Map(出現回数) → 最頻値(複数対応)」まで完成しました。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました