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

请求指导实现随机数生成与频次统计分析程序

我来帮你搞定这个随机数程序的实现,直接给你完整的可运行代码+详细解释,你可以对照自己的实现看看哪里有问题:

完整实现思路与代码(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:36