You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取数组元素频率?星号统计数组频次的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:27:33