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

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

  • 文件的行数

  • 每个字母的频率

  • 每个非字母字符的频率

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

A ***** - 5

B *** - 3

C ******* - 7

我的输出如下所示:


*********************

*********************

*********************

A 263

B 130

C 50

等等。


萧十郎
浏览 203回答 1
1回答

蝴蝶不菲

这就是你完成任务的方式。它会计算小写字母的数量并打印除频率之外的星星,就像您想要的那样。这是一般代码(paragraph是包含文件内容的字符串):int[] lettercount = new int[26];for(int i = 0; i < 26; i++){&nbsp; &nbsp; //Set every single number in the array to 0.&nbsp; &nbsp; lettercount[i] = 0;}for(char s : paragraph.toCharArray()){&nbsp; &nbsp; int converted = (int) s;&nbsp; &nbsp; converted -= 97;&nbsp; &nbsp; if(converted >=0 && converted <=25){&nbsp; &nbsp; &nbsp; &nbsp; lettercount[converted] += 1;&nbsp; &nbsp; }}//Print out the letter with the frequencies.for(int i = 0; i < 26; i++){&nbsp; &nbsp; char convertback = (char) (i+97);&nbsp; &nbsp; String stars = "";&nbsp; &nbsp; for(int j = 0; j < lettercount[i]; j++){&nbsp; &nbsp; &nbsp; &nbsp; stars += "*";&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println(convertback + " " + stars + " - " + lettercount[i]);}这应该适用于小写字母。如果你想做大写字母,lettercount[]应该是52个元素长。您还必须检查是否converted (在第二个 for 循环中),减去 97 后是否为负数,如果是,则加回 58。我希望这有帮助!如果您有任何问题,请在下面发表评论。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java