今回は「出現回数ランキング」をさらに発展させて、グラフ風に可視化(棒グラフっぽく表示)するサンプルを紹介します。
テキストベースですが、出現回数を「#」の数で表現すると直感的に分かりやすくなります。
サンプルコード:出現回数を棒グラフ風に表示
import java.util.*;
public class FrequencyGraphSample {
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);
}
// Map をリストに変換してソート(出現回数の降順)
List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(countMap.entrySet());
entryList.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));
// 結果表示(棒グラフ風)
System.out.println("入力された整数リスト: " + numbers);
System.out.println("出現回数グラフ:");
for (Map.Entry<Integer, Integer> entry : entryList) {
int value = entry.getKey();
int count = entry.getValue();
String bar = "#".repeat(count); // Java 11以降で利用可能
System.out.println(value + " : " + bar + " (" + count + ")");
}
}
}
Java✅ 実行例
整数をスペース区切りで入力してください(例: 10 20 30 20 10):
30 10 20 10 40 20 10 30
入力された整数リスト: [30, 10, 20, 10, 40, 20, 10, 30]
出現回数グラフ:
10 : ### (3)
30 : ## (2)
20 : ## (2)
40 : # (1)
ポイント
"#".repeat(count)で「#」を回数分繰り返して棒グラフ風に表示(Java 11以上)- 出現回数が多い順に並べているので、視覚的に「どれが多いか」が一目で分かる
- Java 8以前なら
new String(new char[count]).replace("\0", "#")で代用可能
発展アイデア
- 出現回数が多いものだけ上位3位まで表示
- 値を昇順に並べてグラフ化(
TreeMapを利用) - 棒の長さを「#」ではなく「*」や「■」に変えて見やすくする
👉 これで「入力 → 出現回数マップ → ランキング → 棒グラフ表示」まで完成しました。

