我想计算一个文本文件中字母的出现次数并绘制一个水平直方图。但是,最长的条应具有50
个星的长度。当我拥有小于50
的数字时,这不是问题,但是如何缩放它,以便在直方图上显示所有内容?
我想出了这个公式:50 - 50 * histogram[i] / maxnum
其中,50
是条的最大长度,histogram[i]
是字母中i-th
字母出现的次数,maxnum
是代表数字的数量我档案中最常见的字母的出现。
int[] histogram = new int[26];
String alphabeth = "abcdefghijklmnopqrstuvwxyz";
这是我建立直方图的方式:
while((line = bfr.readLine()) != null){
for (int i =0;i< line.length();i++){
int index = alphabeth.indexOf(line.charAt(i));
if (index != -1)
histogram[index]++;
}
}
我在寻找
maxval
:int maxnum = histogram[0];
for (int p=1; p<histogram.length;p++){
if (maxnum < histogram[p]){
maxnum = histogram[p];
}
}
这就是我的绘制方式:
for (int i=0; i<alphabeth.length(); i++){
System.out.print(alphabeth.charAt(i) + " ");
int count = histogram[i];
for (int k=0; k<50-50*histogram[i]/maxval; k++){
System.out.print("*");
}
}
这样对吗?
最佳答案
我看不到50-50的感觉。您不能只删除前50个吗?
直方图[i]或maxval是float还是double类型?除法不返回整数值将需要此方法。
顺便说一句:您应该在公式中使用方括号。计算单独打印的星数并将其存储在单独的变量中,而不是在for循环的标题中计算它可能是个好主意。
关于java - 打印文件中字母的水平直方图。如何缩放呢? java ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44727574/