编辑:添加了显示频率计数的代码
这不是家庭作业。我这样做是为了好玩。
我希望这一小段代码就足够了,但我遇到了一个奇怪的问题。我计算了数组中每个数字的频率,效果很好。好吧,我想查看这些频率的百分比,所以我创建了一个小方法来计算它。
由于第一个元素的频率是 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/