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

数组使用问题:Java统计输入数字出现次数程序调试

问题修正:统计0-50整数出现次数的Java程序

原代码存在的问题

  • 循环条件逻辑错误:原while (num > 0 || num < 50)的条件完全不符合需求,正确逻辑应该是当输入的数字在0-50范围内时继续接收输入,原条件会导致循环行为混乱。
  • 未实现计数功能:每次输入有效数字后,没有对数组对应位置的计数进行累加,导致最终统计结果全为0。
  • 输出逻辑不合理:原代码会打印0-50所有数字的计数(包括次数为0的),且格式混乱,需求要求只输出出现过至少一次的数字及其次数。
  • 循环结构设计不当:原循环先判断再输入,初始值的设置会影响第一次循环的执行,应该调整为先输入再判断的结构。

修正后的代码

import java.util.Scanner;

public class Occurrence {
    public static void main(String[] args) {
        // 数组索引对应0-50的数字,值对应出现次数
        int[] numArray = new int[51];
        Scanner scan = new Scanner(System.in);
        int num;

        System.out.println("Enter integers between 0-50 (enter out-of-range number to stop):");
        while (true) {
            num = scan.nextInt();
            // 判断输入是否在有效范围内
            if (num < 0 || num > 50) {
                System.out.println("You have stopped input.");
                break;
            }
            // 对应数字的计数加1
            numArray[num]++;
        }

        // 输出出现过至少一次的数字及其次数
        System.out.println("\nOccurrence statistics:");
        for (int i = 0; i < numArray.length; i++) {
            if (numArray[i] > 0) {
                System.out.printf("%d: %d times%n", i, numArray[i]);
            }
        }
        scan.close();
    }
}

修正说明

  • 使用while(true)结合break的结构,先接收输入再判断是否超出范围,逻辑更清晰。
  • 每次输入有效数字时,执行numArray[num]++,实现对应数字的次数累加。
  • 输出时通过numArray[i] > 0过滤掉未出现过的数字,用printf保证输出格式整齐。
  • 最后关闭Scanner资源,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:58:27