请求指导实现随机数生成与频次统计分析程序
我来帮你搞定这个随机数程序的实现,直接给你完整的可运行代码+详细解释,你可以对照自己的实现看看哪里有问题:
完整实现思路与代码(Java)
因为你提到了ArrayList,我默认用Java来实现,整体流程完全贴合你的需求:
import java.util.ArrayList; import java.util.Random; public class RandomNumberTracker { public static void main(String[] args) { // 1. 生成0-30的随机数,存入ArrayList直到总和≥200 ArrayList<Integer> numbers = new ArrayList<>(); Random random = new Random(); int totalSum = 0; while (totalSum < 200) { int randomNum = random.nextInt(31); // 生成0到30的随机数(nextInt(31)返回0-30) numbers.add(randomNum); totalSum += randomNum; } // 一行打印所有生成的随机数 System.out.println("生成的随机数列表:"); for (int num : numbers) { System.out.print(num + " "); } System.out.println("\n累计总和:" + totalSum); // 2. 创建计数器数组统计每个数值的出现次数 int[] occurrences = new int[31]; // 索引0-30对应数字0-30,刚好覆盖所有可能值 for (int num : numbers) { occurrences[num]++; // 对应数字的计数+1 } // 3. 两列格式打印数值与出现次数 System.out.println("\n数值\t出现次数"); System.out.println("-------------------"); for (int i = 0; i < occurrences.length; i++) { // 可选:只打印出现过的数值,去掉if则打印所有0-30的数值(包括出现0次的) if (occurrences[i] > 0) { System.out.printf("%d\t\t%d%n", i, occurrences[i]); } } // 4. 找出并打印出现次数最多的数值 int maxOccurrence = 0; ArrayList<Integer> mostFrequentNums = new ArrayList<>(); for (int i = 0; i < occurrences.length; i++) { if (occurrences[i] > maxOccurrence) { maxOccurrence = occurrences[i]; mostFrequentNums.clear(); mostFrequentNums.add(i); } else if (occurrences[i] == maxOccurrence) { mostFrequentNums.add(i); } } // 格式化输出结果 System.out.println("\n出现次数最多的数值:"); if (mostFrequentNums.size() == 1) { System.out.printf("数值%d,总共出现了%d次%n", mostFrequentNums.get(0), maxOccurrence); } else { System.out.print("数值"); for (int index = 0; index < mostFrequentNums.size(); index++) { if (index > 0) { System.out.print("、"); } System.out.print(mostFrequentNums.get(index)); } System.out.printf(",均出现了%d次%n", maxOccurrence); } } }
关键细节解释
- 随机数生成:
random.nextInt(31)是正确的写法,因为nextInt(n)会生成0到n-1的整数,所以传入31才能覆盖0-30的范围。 - 计数器数组:用长度为31的数组
occurrences,索引直接对应数字本身,遍历ArrayList时直接累加对应索引的计数,简单高效。 - 处理多数值并列最多的情况:如果有多个数字出现次数相同且都是最多的,代码会把它们全部收集起来并打印,避免只输出第一个的问题。
- 打印格式:用
\t实现两列对齐,printf保证输出格式整齐。
常见错误排查
如果你自己的实现有问题,可以检查这几点:
- 是不是总和累加的位置错了?要先把随机数加入列表,再累加总和,不然会漏掉最后一个数。
- 计数器数组的长度是不是设成30了?那样会漏掉数字30的统计。
- 打印随机数时是不是用了
println?那样每个数字会单独一行,要改用print才能在一行输出。
内容的提问来源于stack exchange,提问作者user8852923
相关产品推荐
相关产品推荐

