统计数组中连续重复元素的出现次数(附待完善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
相关产品推荐
相关产品推荐

