
import java.util.Scanner;
public class Histogram {
private int min;
private int max;
private int[]stats;
public Histogram(int m, int n){
assign(m, n, Math.min(m, n));
}
private void assign(int mn , int mx, int mi){
min = Math.min(mn, mi);
max = Math.max(mx, mi);
stats = new int[max-min+1];
}
public boolean add(int i){
boolean done = false;
if(min <= i && max >= i){
i -= min;
stats[i] ++;
done = true;
}
return done;
}
public void addOutOfRange(int i){
if(add(i)) return;
int[]tmp = stats;
int j = min;
assign(min, max, i);
System.arraycopy(tmp, 0, stats, j, tmp.length);
add(i);
}
public String toString(){
StringBuilder sb = new StringBuilder();
for(int i = 0, j; stats.length > i; i++){
if(0 != i)sb.append(' ');
sb.append(min+i).append(':');
for(j = 1; stats[i] >= j; j++) sb.append('*');
}
return sb.toString();
}
public static void main(String[]args){
Scanner input = new Scanner(System.in);
System.out.print("Enter lower bounds for histogram: ");
int low = new Integer(input.nextLine());
System.out.print("Enter upper bounds for histogram: ");
int high = new Integer(input.nextLine());
Histogram histo = new Histogram(low, high);
int num;
do{
System.out.print("Enter data: ");
num = new Integer(input.nextLine());
if(!histo.add(num)){
System.out.println("Warn: out of range!");
break;
}
}while(true);
System.out.println(histo);
}
}
Comments
Post a Comment