为何查找数组中出现最频繁整数后代码额外输出0?
问题分析与修复:统计高频整数时额外输出0的原因
问题描述
输入以-1结尾的整数序列(例如5 9 2 2 1 4 5 5 -1),代码输出结果为5 0,但仅需输出出现最频繁的整数5,无论输入何种组合,结果都会额外附带一个0。
问题根源
- 数组默认值引发无效统计:Java中创建
int数组时,所有未手动赋值的元素会默认初始化为0。你的代码读取到-1就停止输入,数组中剩余未被输入覆盖的位置全是0。 - 遍历范围错误:统计频率的双层循环遍历了整个数组的21个元素,包括那些未被输入填充的0。当这些0的出现次数超过之前的最大频率时,就会被当作高频元素输出。
- 输出时机错误:每次找到更高频率的元素就立刻输出,而非遍历完所有有效元素后输出最终结果,导致中间结果和错误的0都被打印。
修复方案
- 记录实际输入的有效元素个数,避免遍历未使用的数组位置。
- 调整统计循环的遍历范围,仅处理有效输入的元素。
- 将输出语句移到所有统计逻辑完成后,只输出最终的高频元素。
- 初始化存储高频元素的变量,避免编译警告。
修复后的代码
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
相关产品推荐
相关产品推荐

