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

整数中各数字出现次数统计程序无输出问题求助

问题排查与修复方案

我帮你找出了代码里的几个关键问题,正是这些问题导致程序没有输出甚至直接崩溃:

1. 循环逻辑陷入死循环

在while循环里你写了num /= num;,这会让num直接变成1(只要num不是0),之后每次循环1/1还是1,程序会一直卡在循环里,根本执行不到后面的输出代码!正确的写法应该是num /= 10;,这样每次循环都会把数字的最后一位去掉,直到num变成0才会退出循环。

2. 数组越界触发异常

你的for循环条件是i <= arr.length,但数组arr的长度是10,索引范围是0到9。当i等于10的时候,访问arr[10]会触发数组越界异常,程序直接崩溃,自然看不到任何输出。应该改成i < arr.length或者i <=9。

3. 冗余变量与边界情况遗漏

  • 你定义了outcome变量但完全没用到,可以删掉它简化代码;
  • 如果用户输入0,while循环不会执行,数组里的元素都是0,最后输出0的次数是0,这不符合预期,所以要单独处理输入0的情况。

修复后的完整代码

import java.util.Scanner;

public class NumberCounts {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int arr[] = new int[10];
        int num;

        System.out.println("Enter a number: ");
        num = scan.nextInt();

        // 单独处理输入0的情况
        if (num == 0) {
            arr[0] = 1;
        } else {
            while (num != 0) {
                arr[num % 10] += 1;
                num /= 10; // 修正:每次去掉数字的最后一位
            }
        }

        // 遍历数组输出,避免越界
        for (int i = 0; i < arr.length; i++) {
            // 可选优化:只输出出现过的数字,减少无效输出
            if (arr[i] > 0) {
                System.out.println(i + " : " + arr[i]);
            }
        }
        scan.close(); // 记得关闭Scanner资源
    }
}

测试示例

比如输入123123,输出会是:

1 : 2
2 : 2
3 : 2

输入0的话,输出:

0 : 1

这样程序就能正常统计并输出每个数字的出现次数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:44