如何获取数组元素频率?星号统计数组频次的Java代码优化求助
如何统计数组元素频率并正确用星号展示出现次数?
我来帮你搞定这两个问题~咱们一步步来:
一、先搞定数组元素的频率统计
你可以用两种常见方式来统计:
- 方式1:用数组统计(适合元素是连续整数的场景)
因为你的目标数字是0-4,刚好是连续整数,直接用一个数组,下标对应要统计的数字,数组值对应出现次数。遍历原数组时,每遇到一个数字,就把对应下标位置的计数加1。 - 方式2:用HashMap统计(通用场景,适合任意元素)
如果数组元素不是连续整数,用HashMap更灵活——键存数组元素,值存该元素的出现次数,遍历数组时更新对应键的值即可。
二、修复星号输出过多的问题
你的现有代码问题很明确:内层循环写的是j <= rateFrequency.length,这会循环「数组长度+1」次,而且完全没关联当前数字的实际出现次数,所以星号数量肯定不对。咱们要把内层循环的次数改成当前数字的实际出现频率。
修正后的完整代码
用数组统计的版本(适配你的场景)
public class Frequency { public static void main(String[] args) { int[] rateFrequency = {0, 1, 2, 2, 2, 3, 3}; // 初始化频率数组,下标0-4对应要统计的数字 int[] frequencyCount = new int[5]; // 第一步:统计每个数字的出现次数 for (int num : rateFrequency) { // 只统计0-4的数字,避免数组越界 if (num >= 0 && num <= 4) { frequencyCount[num]++; } } // 第二步:按数字输出对应数量的星号 for (int i = 0; i <= 4; i++) { System.out.print(i + ": "); // 循环次数等于当前数字的出现频率 for (int j = 0; j < frequencyCount[i]; j++) { System.out.print("* "); } System.out.println(); // 换行分隔每个数字 } } }
用HashMap的通用版本
import java.util.HashMap; import java.util.Map; public class Frequency { public static void main(String[] args) { int[] rateFrequency = {0, 1, 2, 2, 2, 3, 3}; Map<Integer, Integer> frequencyMap = new HashMap<>(); // 统计频率 for (int num : rateFrequency) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } // 输出0-4的星号展示 for (int i = 0; i <= 4; i++) { System.out.print(i + ": "); // 获取当前数字的频率,没有的话默认是0 int count = frequencyMap.getOrDefault(i, 0); for (int j = 0; j < count; j++) { System.out.print("* "); } System.out.println(); } } }
代码说明
- 先完成频率统计这一步,把每个数字的出现次数存起来,这是核心前提;
- 输出星号时,内层循环的次数严格等于该数字的出现次数,这样就不会出现星号过多的问题;
- 两种版本都会输出正确结果:
0: * 1: * 2: * * * 3: * * 4:
内容的提问来源于stack exchange,提问作者nadine jansen
相关产品推荐
相关产品推荐

