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

为何查找数组中出现最频繁整数后代码额外输出0?

问题分析与修复:统计高频整数时额外输出0的原因

问题描述

输入以-1结尾的整数序列(例如5 9 2 2 1 4 5 5 -1),代码输出结果为5 0,但仅需输出出现最频繁的整数5,无论输入何种组合,结果都会额外附带一个0。

问题根源

  1. 数组默认值引发无效统计:Java中创建int数组时,所有未手动赋值的元素会默认初始化为0。你的代码读取到-1就停止输入,数组中剩余未被输入覆盖的位置全是0。
  2. 遍历范围错误:统计频率的双层循环遍历了整个数组的21个元素,包括那些未被输入填充的0。当这些0的出现次数超过之前的最大频率时,就会被当作高频元素输出。
  3. 输出时机错误:每次找到更高频率的元素就立刻输出,而非遍历完所有有效元素后输出最终结果,导致中间结果和错误的0都被打印。

修复方案

  1. 记录实际输入的有效元素个数,避免遍历未使用的数组位置。
  2. 调整统计循环的遍历范围,仅处理有效输入的元素。
  3. 将输出语句移到所有统计逻辑完成后,只输出最终的高频元素。
  4. 初始化存储高频元素的变量,避免编译警告。

修复后的代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in); 
        int[] b = new int[21];
        int inputCount = 0;

        // 读取输入并统计有效元素数量
        for (int i = 0; i < b.length; ++i) {
            int num = scnr.nextInt();
            if (num == -1) {
                break;
            }
            b[i] = num;
            inputCount++;
        }

        int maxcount = 0;
        int element_having_max_freq = 0; // 初始化变量

        // 仅遍历有效输入的元素统计频率
        for (int i = 0; i < inputCount; ++i) {
            int count = 0;
            for (int j = 0; j < inputCount; ++j) {
                if (b[i] == b[j]) {
                    count++;
                }
            }

            if (count > maxcount) {
                maxcount = count;
                element_having_max_freq = b[i];
            }
        }

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:50:40