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
相关产品推荐
相关产品推荐

