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

Java程序调试:如何仅输出正确的数字出现次数统计结果?

问题解决:避免重复输出数字统计结果

问题根源

你当前的代码在排序后的数组上,外层循环会遍历每一个元素,包括重复元素。比如数字2出现两次:第一次遍历第一个2时统计出出现2次并打印;第二次遍历第二个2时,统计的是从它之后的元素里2的数量(此时为0),所以count=1,又打印一次,最终导致重复输出。

修改方案一:基于现有代码调整,跳过重复元素

数组已经排序,相同数字会连续排列,我们可以在统计完一个数字后,直接跳到下一个不同数字的位置,避免重复处理:

修改最后的循环部分:

for (i = 0; i < userNumsNoZero.length; ) {
    count = 1;
    // 统计当前数字的出现次数,数组已排序,遇到不同数字就停止
    for (int j = i + 1; j < userNumsNoZero.length; j++) {
        if (userNumsNoZero[i] == userNumsNoZero[j]) {
            count++;
        } else {
            break;
        }
    }
    // 打印统计结果
    if (count > 1) {
        System.out.println("The number " + userNumsNoZero[i] + " appears " + count + " times.");
    } else {
        System.out.println("The number " + userNumsNoZero[i] + " appears " + count + " time.");
    }
    // 跳到下一个不同数字的起始位置
    i += count;
}

关键改动:

  • 外层循环不再逐次i++,而是直接跳到当前数字最后一次出现的下一个位置(i += count)
  • 内层统计循环遇到不同数字就break,利用排序特性提升效率
  • 把print改为println,输出格式更规范

修改方案二:使用计数数组(更简洁高效)

由于输入范围固定为1-100,我们可以直接创建一个大小为101的数组(索引对应数字),每个位置存储对应数字的出现次数,这种方法无需排序,逻辑更简单:

完整代码示例:

import java.util.Scanner;

public class CountOccur {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // 索引0闲置,1-100对应输入的数字
        int[] countArray = new int[101];
        
        System.out.println("Enter some integers between 1 and 100 (0 when done): ");
        
        int userNum;
        do {
            userNum = input.nextInt();
            if (userNum >= 1 && userNum <= 100) {
                // 对应数字的计数加1
                countArray[userNum]++;
            }
        } while (userNum != 0);
        
        // 遍历计数数组,输出有出现记录的数字
        for (int i = 1; i <= 100; i++) {
            if (countArray[i] > 0) {
                if (countArray[i] > 1) {
                    System.out.println("The number " + i + " appears " + countArray[i] + " times.");
                } else {
                    System.out.println("The number " + i + " appears " + countArray[i] + " time.");
                }
            }
        }
        input.close();
    }
}

优点:

  • 无需存储所有输入数字,节省内存
  • 逻辑直观,避免了排序和嵌套循环的复杂处理
  • 天然不会出现重复输出问题,每个数字仅遍历一次

测试验证

用你的输入示例2 5 6 5 4 3 23 43 2 0,两种方案都会输出正确结果:

The number 2 appears 2 times.
The number 3 appears 1 time.
The number 4 appears 1 time.
The number 5 appears 2 times.
The number 6 appears 1 time.
The number 23 appears 1 time.
The number 43 appears 1 time.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:56:20