我想计算一个文本文件中字母的出现次数并绘制一个水平直方图。但是,最长的条应具有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/

10-12 00:24
查看更多