我正在使用java扫描程序从键盘输入文本字符串,然后让我的程序创建一个输出a-z的表格,并显示输入字符串中找到的每个字母的数量。 (字母频率)
我的司机/主要班级
import java.util.*;
public class LetterDriver{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
LetterProfile profile = new LetterProfile();
String tScan = " ";
int numReturns = 0;
while(numReturns < 2){
tScan = s.nextLine();
if (tScan.length() == 0){
numReturns++;
}
else{
profile.countChars(tScan);
numReturns = 0;
}
}
profile.printResults();
}
}
我的个人资料类
public class LetterProfile {
int score[] = new int [26];
public void countChars (String s) {
s = s.toLowerCase();
char a = 'a';
for (int i = 0; i < s.length(); i++) {
int next = (int)s.charAt(i) - (int) a;
if ( next<=26 && next >= 0)
score[next]++;
}
}
public int largestLength() {
int largest = 0;
int largestindex = 0;
for(int a = 0; a<26; a++) {
if(score[a] > largest) {
largest = score[a];
largestindex = a;
}
}
return (char)largestindex;
}
public void printResults() {
largestLength();
System.out.println(("Most Frequent") + (" :") + largestLength());
}
}
程序编译,当我运行它时它允许我输入我的输入,但它给我的唯一输出是数字形式最常用的字母(因为我的数组是0-25,0 = a,1 = b)
基本上我遇到的麻烦就是让我的代码输出一个a-z表,同时显示旁边的字母频率。有没有一种简单的方法来完成这项工作?
感谢。
答案 0 :(得分:2)
我不确定我理解 - 当然它所做的就是打印最频繁的字母 - 这就是printResults
方法所做的一切。
只需遍历score
数组并打印相应字母旁边的每个分数,您就应该拥有整个频率表。
将此添加到printResults
方法中已有的代码中。结果是它将首先打印最常用的字母,然后是字母频率列表,从数字1开始。
for (int i = 0; i < score.length; i++) {
System.out.println( (i+1) + ": " + score[i]);
}
例如:
Most frequent: e
1: 5
2: 0
3: 2
4: 0
5: 15
...
等。
答案 1 :(得分:0)