/****************************************************************************** * This program draws a histogram graph. * * Copyright © 2020 Richard Lesh. All rights reserved. *****************************************************************************/ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.pureprogrammer.Utils; public class Histogram { static final double MAX_BAR_SIZE = 50.; public static void main(String[] args) { List buffer = new ArrayList<>(); String line; while ((line = Utils.getline()) != null) { buffer.add(line); } List labels = new ArrayList<>(); List freqs = new ArrayList<>(); double maxFreq = 0.0; boolean isFirst = true; for (String data : buffer) { if (isFirst) { isFirst = false; continue; } final int POS = Utils.cpIndexOf(data, "\t"); if (POS > 0) { final String LABEL = Utils.cpSubstring(data, 0, POS); final double FREQ = Utils.stodWithDefault(Utils.cpSubstring(data, POS + 1), 0.0) * 100.; labels.add(LABEL); freqs.add(FREQ); if (FREQ > maxFreq) { maxFreq = FREQ; } } } for (int i = 0; i < labels.size(); ++i) { final int BAR_SIZE = (int)(Math.round(freqs.get(i) / maxFreq * MAX_BAR_SIZE)); System.out.println(Utils.format("{0:>18.18s} {1:8.4f}% {2:s}", labels.get(i), freqs.get(i), "=".repeat(BAR_SIZE))); } } }