数组使用问题: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
相关产品推荐
相关产品推荐

