如何修复Java中错误计算数字百分比的程序?

如何修复Java中错误计算数字百分比的程序?,java,percentage,Java,Percentage,我试图找到文档中每个字母的频率,所以这个程序计算每个字母出现的次数,然后找到字母总数。然后它应该找到频率,问题是它正确地计算字母和总数,但是百分比不正确。我如何计算百分比 //find number of occurrences for each letter String[] letter = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x

我试图找到文档中每个字母的频率,所以这个程序计算每个字母出现的次数,然后找到字母总数。然后它应该找到频率,问题是它正确地计算字母和总数,但是百分比不正确。我如何计算百分比

  //find number of occurrences for each letter
    String[] letter = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};      
    int[] count = new int[26];
    int totalCount = 0;

    for(int i = 0; i < subset.length(); i++)
    {
        char letters = subset.charAt(i);
        if(letters == 'a')
            count[0]++;
        else if(letters == 'b')
            count[1]++;
        else if(letters == 'c')
            count[2]++;
        else if(letters == 'd')
            count[3]++;
        else if(letters == 'e')
            count[4]++;
        else if(letters == 'f')
            count[5]++;
        else if(letters == 'g')
            count[6]++;
        else if(letters == 'h')
            count[7]++;
        else if(letters == 'i')
            count[8]++;
        else if(letters == 'j')
            count[9]++;
        else if(letters == 'k')
            count[10]++;
        else if(letters == 'l')
            count[11]++;
        else if(letters == 'm')
            count[12]++;
        else if(letters == 'n')
            count[13]++;
        else if(letters == 'o')
            count[14]++;
        else if(letters == 'p')
            count[15]++;
        else if(letters == 'q')
            count[16]++;
        else if(letters == 'r')
            count[17]++;
        else if(letters == 's')
            count[18]++;
        else if(letters == 't')
            count[19]++;
        else if(letters == 'u')
            count[20]++;
        else if(letters == 'v')
            count[21]++;
        else if(letters == 'w')
            count[22]++;
        else if(letters == 'x')
            count[23]++;
        else if(letters == 'y')
            count[24]++;
        else if(letters == 'z')
            count[25]++;
    }

    //find total characters in document                
    double[] frequency = new double[26];
    for(int i = 0; i < 26; i++)
    {
        totalCount += count[i];
        frequency[i] = ((double)count[i] / (totalCount + 1)) * 100;        //the problem
    }
    System.out.println(totalCount); 


    //for(int i = 0; i < 26; i++)
        //{
        //    frequency[i] = (double)(count[i] / totalCount * 100);
        //}


    //print 
    System.out.println(" Letter  Occurrences  Frequency");
    System.out.println("--------------------------------");
    for(int i = 0; i < 26; i++)
    {
        System.out.println("  " + letter[i] + "\t  " + count[i] + "\t       " + df.format(frequency[i]));
    }

在获得totalCount后,需要计算频率:

for(int i = 0; i < 26; i++) { 
    totalCount += count[i]; 
} 
System.out.println(totalCount);  

System.out.println(" Letter Occurrences Frequency"); 

System.out.println("--------------------------------");     
for(int i = 0; i < 26; i++) { 
    frequency[i] = ((double)count[i] / (totalCount + 1)) * 100;
    System.out.println(" " + letter[i] + "\t " + count[i] + "\t " + df.format(frequency[i])); 
}
旁注

totalCount不需要for循环,因为它只是字符串的长度,即totalCount=subset.length

你不需要25条if-else语句来查找字母计数。。。只要做: 计数[subset.charAti-61]+; 61是字母“a”的ASCII值


问题是它正确地计算字母和总数,但百分比不正确。你能说得更具体些吗?你也应该考虑改变你的巨大障碍。每个字符都是一个整数。考虑这个:“B”=“A”+ 1,为什么不:char char=C;int id=c-'a'计数[id]++;提示:例如,您想阅读Java地图。你的代码过于复杂;与@GhostCat一致,直接使用数组的代码通常更复杂,也没有什么优势。您将很快看到如何使代码更接近概念,并减少对实现细节的混乱。统计每个字母的出现次数:建议映射出现次数=新建HashMap;…。更直接地说,61是“a”的单个UTF-16代码单元字符值。此外,subset.charAti-'a'更易于阅读。