如何在Java中制作频率直方图

时间:2018-11-11 19:50:02

标签: java histogram frequency

我正在尝试创建一个读取文件并输出以下内容的代码:

  • 文件的行数
  • 每个字母的频率
  • 每个非字母字符的频率

我想为字母和数字的频率创建直方图,但似乎找不到解决方案。如果有的话,我希望输出看起来像这样:

A ***** - 5
B *** - 3
C ******* - 7

我的输出如下:

*********************
*********************
*********************
A 263
B 130
C 50

1 个答案:

答案 0 :(得分:0)

这是您执行任务的方式。它会计算小写字母的数量,并根据需要打印除频率外的星星。

以下是常规代码(paragraph是包含文件内容的字符串):

int[] lettercount = new int[26];
for(int i = 0; i < 26; i++){
    //Set every single number in the array to 0.
    lettercount[i] = 0;
}

for(char s : paragraph.toCharArray()){
    int converted = (int) s;
    converted -= 97;
    if(converted >=0 && converted <=25){
        lettercount[converted] += 1;
    }
}

//Print out the letter with the frequencies.
for(int i = 0; i < 26; i++){
    char convertback = (char) (i+97);
    String stars = "";
    for(int j = 0; j < lettercount[i]; j++){
        stars += "*";
    }
    System.out.println(convertback + " " + stars + " - " + lettercount[i]);
}

这应该适用于小写字母。如果要大写字母,lettercount[]的长度应为52个元素。在减去97为负数后,还必须检查converted (在第二个for循环中),如果是,则应加58。

我希望这会有所帮助!如果您有任何问题,请在下面评论。