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

统计数组中连续重复元素的出现次数(附待完善Java代码)

补全连续重复元素统计的Java函数,实现预期结果

我看了你给出的需求和待完善的函数,核心是要统计连续重复的元素出现次数(注意不是全局去重统计,而是每个连续段单独计数),你的现有代码框架方向是对的,但需要调整内层循环的逻辑以及外层循环的步长,避免重复处理元素。

完整修正后的代码(基础版本)

private void displayItems(List<Double> items) {
    // 处理空列表的边界情况,避免空指针或无效遍历
    if (items == null || items.isEmpty()) {
        return;
    }

    int i = 0;
    while (i < items.size()) {
        double currentItem = items.get(i);
        int count = 1;

        // 内层循环统计连续相同的元素
        while (i + 1 < items.size() && items.get(i + 1).equals(currentItem)) {
            count++;
            i++; // 移动i的位置,跳过已统计的重复元素
        }

        // 输出当前连续段的统计结果
        System.out.printf("%s=%d、", currentItem, count);
        i++; // 移动到下一个不同的元素
    }
}

代码逻辑说明

  • 先做边界校验:如果传入的列表为空或null,直接返回,避免运行时错误
  • 用while循环替代嵌套for循环,更灵活控制外层循环的步长
  • 内层while循环专门遍历连续重复的元素:只要下一个元素和当前元素相等,就增加计数并移动i,这样外层循环不会重复处理已经统计过的元素
  • 每完成一个连续段的统计,就输出元素=次数的格式

优化输出格式(去掉末尾多余顿号)

如果希望输出完全匹配你期望的格式(没有末尾的顿号),可以用StringBuilder拼接结果后再输出:

private void displayItems(List<Double> items) {
    if (items == null || items.isEmpty()) {
        return;
    }

    StringBuilder resultBuilder = new StringBuilder();
    int i = 0;
    while (i < items.size()) {
        double currentItem = items.get(i);
        int count = 1;

        while (i + 1 < items.size() && items.get(i + 1).equals(currentItem)) {
            count++;
            i++;
        }

        // 拼接当前段的结果
        resultBuilder.append(String.format("%s=%d", currentItem, count));
        // 不是最后一段的话,添加顿号分隔
        if (i != items.size() - 1) {
            resultBuilder.append("、");
        }
        i++;
    }

    // 输出最终结果
    System.out.println(resultBuilder);
}

测试验证

当传入列表Arrays.asList(3.1, 3.1, 3.1, 3.2, 3.2, 3.3, 3.4, 3.4, 3.4, 3.4, 3.1, 3.1)时,运行后会输出:

3.1=3、3.2=2、3.3=1、3.4=4、3.1=2

完全符合你的期望结果。

内容的提问来源于stack exchange,提问作者Adam Amin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:20:25