确定每个单词每个字母的平均出现次数

时间:2014-01-04 10:43:06

标签: java arrays

我正在制作一个程序,使用数组确定一系列单词中每个字母的出现频率。它将输出每个单词的每个字母的平均出现次数,这是我的问题

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]);

                    }         
                }
            }
        }

I / O

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

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退出,因此您有一个无限循环。