java - for循环中停留在第一个元素的百分比计算

标签 java foreach frequency

编辑:添加了显示频率计数的代码

这不是家庭作业。我这样做是为了好玩。

我希望这一小段代码就足够了,但我遇到了一个奇怪的问题。我计算了数组中每个数字的频率,效果很好。好吧,我想查看这些频率的百分比,所以我创建了一个小方法来计算它。

由于第一个元素的频率是 42,而我的总字符数是 1,553,因此它为每个元素打印 2.7%,而不是根据不同的频率进行更改。

我在调试期间设置了断点,一旦频率计数器计算出第一个元素的频率,该值就会与其余元素保持一致。 O.o

我尝试在百分比计算之外放置一个 for 循环,它做了完全相同的事情。它从未脱离第一个频率计数器。

   System.out.println(" FREQUENCY COUNT RESULT");
    Collections.sort(array);

    Hashtable<Integer, Integer> table = new Hashtable<>();

    for (int i = 0; i < array.size(); i++) {
        if (table.containsKey(array.get(i))) {
            count = table.get(array.get(i));
            table.put(array.get(i), ++count);
        } else {
            table.put(array.get(i), 1);
        }
    }
    set = table.keySet();
    count = 0;
    for (Integer n : set) {
        count = table.get(n);
        System.out.println(n + ": Frequency - " + count);
    }
    System.out.println("TOTAL CHARACTERS IN ARRAY: " + countNonSpaces(array));
    System.out.println();
    System.out.println("PERCENTAGE REPORT");
    for(Integer n : set) {
        System.out.println(n + " Percentage: " + getPercentage(count, tally) + "%");
    }
}
public static double getPercentage(int count, int tally) {

    percentCounter = (count * 100.0) / tally;
    percentCounter = percentCounter * 100;
    percentCounter = Math.round(percentCounter);
    percentCounter = percentCounter / 100;
    return percentCounter;
}
public static int countNonSpaces(ArrayList<Integer> array) {

    for (int i = 0; i < array.size(); i++) {
        if (array.get(i) != ' ') {
            tally++;
        }
    }
    return tally;
}

除了百分比计数器之外,一切都正常,所以这就是我省略其他代码的原因。

这是频率输出的一部分:

    10: Frequency - 54
    9: Frequency - 33
    8: Frequency - 37
    7: Frequency - 42
    6: Frequency - 35
    5: Frequency - 36
    4: Frequency - 40
    3: Frequency - 50
    2: Frequency - 39
    1: Frequency - 42 //<---IT'S STUCK HERE...????
    TOTAL CHARACTERS IN ARRAY: 1553

这是相同元素的输出及其(不正确)百分比:

    10 Percentage: 2.7%
    9 Percentage: 2.7%
    8 Percentage: 2.7%
    7 Percentage: 2.7%
    6 Percentage: 2.7%
    5 Percentage: 2.7%
    4 Percentage: 2.7%
    3 Percentage: 2.7%
    2 Percentage: 2.7%
    1 Percentage: 2.7%

最佳答案

您正在循环访问一个集合,但没有使用该集合中的任何值。

for(Integer n : set) {
    System.out.println(n + " Percentage: " + getPercentage(count) + "%");
}

很难从您的代码中看出,但如果该集合包含您的频率和计数,那么您可以计算它

for(SomeObj n : set) {
    System.out.println(" Percentage: " + getPercentage(n.tally, n.count) + "%");
}

基本上您需要计数和计数来计算百分比。每行的计数和计数都不同,因此需要将两者存储在您的集合中。

关于java - for循环中停留在第一个元素的百分比计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620635/

相关文章:

java - 如何编写GetItemIndex方法

c# - 除了某些索引处的元素外,如何在列表上使用 foreach 循环?

点击后Jquery循环

mysql - 使用两个参数选择 SQL 月份

android从mp3获取频率峰值

java - 使用 AND/OR 组合的 Elasticsearch Java 查询

java - 引入一个新变量而不是重复使用参数 "entity"

r - 从 R 中的数据框创建词云

java - Micronaut 循环依赖

php - 我怎样才能编写这段代码来实现相同的结果,但只使用一个 foreach 语句?