整数中各数字出现次数统计程序无输出问题求助
问题排查与修复方案
我帮你找出了代码里的几个关键问题,正是这些问题导致程序没有输出甚至直接崩溃:
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
相关产品推荐
相关产品推荐

