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

标签 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","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]));
    }

最佳答案

获得总计数后需要计算频率:

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.charAt(i) - 61]++; 61 是字母“a”的 ASCII 值

关于java - 如何修复 Java 中错误计算数字百分比的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663715/

相关文章:

java - 垃圾收集和同步可见性

java - 如何在JSP中迭代一个对象来获取百分比?

jQuery:使用 animate 将文本向右滑动,但按 div 的百分比

css - 使用 calculator() 以百分比计算宽度

java - Jasypt - 如何使用 StrongPasswordEncryptor 作为 .properties 文件中的凭据

java - Java 中的 JSON-RPC 客户端

JAVA:从64位fpn转换为十进制

java - Eclipse 插件编辑器

java - 按百分比双重修改

html - 拆分宽度 : 100% parent container into sections with decimals? 的最佳方法是什么