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

Java程序无限循环问题:统计数字数位出现次数代码修复咨询

修复Java数位统计代码的无限循环问题

看起来你遇到的是个很典型的新手坑!先帮你拆解问题根源,再给你具体的修复方案。

问题根源

无限循环的核心原因是:当目标数位不存在时,你没有在每次循环迭代中更新要处理的数字。很多人刚开始写这个逻辑时,会犯“只在找到目标数位时才缩小数字”的错误——这样一来,当目标数位不存在时,数字永远保持原样,循环条件(比如number > 0)永远成立,程序就会一直绕圈停不下来。

举个例子,假设你的错误代码大概是这样:

public class DigitCounter {
    public static void countDigit(int number, int target) {
        int count = 0;
        while (number > 0) {
            int current = number % 10;
            if (current == target) {
                count++;
                number = number / 10; // 只有找到目标才更新数字!
            }
        }
        System.out.println("出现次数:" + count);
    }

    public static void main(String[] args) {
        countDigit(12345, 6); // 目标数位不存在,触发无限循环
    }
}

当target是6时,循环里的if条件永远不成立,number一直是12345,number > 0永远为真,自然就无限循环了。

修复方案

解决方法非常简单:不管有没有找到目标数位,每次循环都要更新数字。把number = number / 10;移到if语句外面,确保每次迭代都缩小数字的范围,直到数字变成0,循环就会正常终止。

修复后的完整代码:

public class DigitCounter {
    public static void countDigit(int number, int target) {
        int count = 0;
        // 先处理负数:转成正数避免循环条件失效
        number = Math.abs(number);
        while (number > 0) {
            int current = number % 10;
            if (current == target) {
                count++;
            }
            // 关键:不管是否找到目标,每次循环都要缩小数字
            number = number / 10;
        }
        // 额外处理数字本身是0的特殊情况
        if (target == 0 && number == 0) {
            count = 1;
        }
        System.out.println("出现次数:" + count);
    }

    public static void main(String[] args) {
        countDigit(12345, 6); // 输出0,正常终止
        countDigit(10020, 0); // 输出3,正确统计0的次数
        countDigit(-789, 9);  // 输出1,兼容负数场景
    }
}

额外优化提示

  • 负数兼容:用Math.abs()把数字转成正数,避免负数导致循环条件判断出错
  • 0的特殊处理:如果原始数字就是0,要单独统计(因为number > 0会直接跳过循环)

这样修改后,不管目标数位是否存在,循环都会正常终止,统计结果也准确啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:06:44