我正在制作一个程序,使用数组确定一系列单词中每个字母的出现频率。它将输出每个单词的每个字母的平均出现次数,这是我的问题。
Input:
The quick brown fox jumps over{enter}
the lazy dog{enter}
1{enter} //1 terminates the program and shows the output
Output:
a: 0.11 b: 0.11 c: 0.11 d: 0.11 e: 0.33
f: 0.11 g: 0.11 h: 0.22 i: 0.11 j: 0.11
k: 0.11 l: 0.11 m: 0.11 n: 0.11 o: 0.44
p: 0.11 q: 0.11 r: 0.22 s: 0.11 t: 0.22
u: 0.22 v: 0.11 w: 0.11 x: 0.11 y: 0.11
z: 0.11
到目前为止,这是我的代码:
public static void main( String[] args )
{
Scanner scn=new Scanner(System.in);
int y=0;
int[] alArray = new int[26];
while(y==0)
{
String in = scn.next().toLowerCase();
for (int x=0; x<in.length(); x++)
{
char chr=in.charAt(x);
int val=(int) chr;
if (val>=97 && val<=122)
{
alArray[chr-'a']++;
}
}
for (int x=0; x<alArray.length; x++)
{
if(alArray[x]>0)
{
char chr = (char) (x+97);
System.out.println(chr+": "+alArray[x]);
}
}
}
}
Input:
Hello World
Output:
e: 1
h: 1
l: 2
o: 1
d: 1
e: 1
h: 1
l: 3
o: 2
r: 1
w: 1
答案 0 :(得分:0)
如果你想要每个字母出现的平均次数,那么你需要对它们进行平均而不仅仅计算它们。即在你计算事件后: -
for (int x=0; x<in.length(); x++) { ... }
你必须得到平均值,即实际出现次数除以可能出现次数
for (int x=0; x<alArray.length; x++) {
{
if(alArray[x]>0)//avoid division by zero
{
//for each letter, do (actualOccurences / possibleOccurences )
alArray[x] = alArray[x] / in.length;
}
}
虽然应该有一个单独的平均数组,但这可以合并到你的最后一个循环中,并可能从这个计算中删除空白字符。
其他问题
如果您不想在输入-1
之前显示输出,则需要将最后一个循环for (int x=0; x<alArray.length; x++)
移到主循环while(y==0)
之外。这也意味着您需要保留输入为possibleOccurences
的所有短语的总和,以便在主循环完成后可以使用它来平均。
最后,没有功能可以输入-1
退出,因此您有一个无限循环。