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

Java抛硬币程序如何实现1-10中出现最频繁数字的统计输出

抛硬币模拟程序补全方案

需求说明

程序目标为模拟1000次抛硬币操作,需完成三项输出:

  • 1-10每个数字的出现次数
  • 出现频次更高的硬币面(偶数映射正面、奇数映射反面)
  • 出现次数最多的数字
    当前代码已完成前两项功能开发,仅缺失最高频数字的统计输出逻辑。

原有实现代码

package so;

import java.util.Random;

public class CoinFlipping {

    public static void main(String[] args) {
        Random randomNumbers = new Random(); // 随机数生成器

        int frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 =
        0, frequency5 = 0, frequency6 = 0, frequency7 = 0, frequency8 = 0,
        frequency9 = 0, frequency10 = 0;// 存储每个数字的出现频次

        int number; // 存储每次生成的随机数

        // 执行1000次模拟
        for (int col = 1; col <= 1000; col++) {
            number = 1 + randomNumbers.nextInt(10); // 生成1-10范围的随机数

            // 判断生成值,对应计数器自增
            switch (number) {
                case 1:
                    ++frequency1;
                    break;
                case 2:
                    ++frequency2;
                    break;
                case 3:
                    ++frequency3;
                    break;
                case 4:
                    ++frequency4;
                    break;
                case 5:
                    ++frequency5;
                    break;
                case 6:
                    ++frequency6;
                    break;
                case 7:
                    ++frequency7;
                    break;
                case 8:
                    ++frequency8;
                    break;
                case 9:
                    ++frequency9;
                    break;
                case 10:
                    ++frequency10;
                    break;
            }
        }

        System.out.println("数字 \t 出现次数");
        System.out.printf("1\t%d\n2\t%d\n3\t%d\n4\t%d\n5\t%d\n6\t%d\n7\t%d\n8\t%d\n9\t%d\n10\t%d\n", frequency1, frequency2, frequency3, frequency4, frequency5, frequency6, frequency7, frequency8, frequency9, frequency10);
        int even = 0, odd = 0;//存储正反面总次数
        even = frequency2 + frequency4 + frequency6 + frequency8 + frequency10;
        odd = frequency1 + frequency3 + frequency5 + frequency7 + frequency9;
        System.out.println("\n 正面次数: " + even + "\n 反面次数: " + odd);
    }
}

补全逻辑说明

无需改动原有统计逻辑,在正反面结果输出代码后追加最高频数字比对逻辑即可,同时兼容多个数字频次并列最高的场景:

  1. 初始化变量存储当前遍历到的最大频次、对应最高频数字结果
  2. 依次将2-10的数字频次和当前最大频次比对,若频次更大则更新最大值和对应数字,若频次相等则将数字追加到并列结果中
  3. 最终输出最高频数字及对应出现次数

补全后可运行完整代码

package so;

import java.util.Random;

public class CoinFlipping {

    public static void main(String[] args) {
        Random randomNumbers = new Random(); // 随机数生成器

        int frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 =
        0, frequency5 = 0, frequency6 = 0, frequency7 = 0, frequency8 = 0,
        frequency9 = 0, frequency10 = 0;// 存储每个数字的出现频次

        int number; // 存储每次生成的随机数

        // 执行1000次模拟
        for (int col = 1; col <= 1000; col++) {
            number = 1 + randomNumbers.nextInt(10); // 生成1-10范围的随机数

            // 判断生成值,对应计数器自增
            switch (number) {
                case 1:
                    ++frequency1;
                    break;
                case 2:
                    ++frequency2;
                    break;
                case 3:
                    ++frequency3;
                    break;
                case 4:
                    ++frequency4;
                    break;
                case 5:
                    ++frequency5;
                    break;
                case 6:
                    ++frequency6;
                    break;
                case 7:
                    ++frequency7;
                    break;
                case 8:
                    ++frequency8;
                    break;
                case 9:
                    ++frequency9;
                    break;
                case 10:
                    ++frequency10;
                    break;
            }
        }

        System.out.println("数字 \t 出现次数");
        System.out.printf("1\t%d\n2\t%d\n3\t%d\n4\t%d\n5\t%d\n6\t%d\n7\t%d\n8\t%d\n9\t%d\n10\t%d\n", frequency1, frequency2, frequency3, frequency4, frequency5, frequency6, frequency7, frequency8, frequency9, frequency10);
        int even = 0, odd = 0;//存储正反面总次数
        even = frequency2 + frequency4 + frequency6 + frequency8 + frequency10;
        odd = frequency1 + frequency3 + frequency5 + frequency7 + frequency9;
        System.out.println("\n 正面次数: " + even + "\n 反面次数: " + odd);

        // 统计出现次数最多的数字
        int maxFreq = frequency1;
        StringBuilder mostFrequentNums = new StringBuilder("1");
        
        if (frequency2 > maxFreq) {
            maxFreq = frequency2;
            mostFrequentNums = new StringBuilder("2");
        } else if (frequency2 == maxFreq) {
            mostFrequentNums.append("、2");
        }
        if (frequency3 > maxFreq) {
            maxFreq = frequency3;
            mostFrequentNums = new StringBuilder("3");
        } else if (frequency3 == maxFreq) {
            mostFrequentNums.append("、3");
        }
        if (frequency4 > maxFreq) {
            maxFreq = frequency4;
            mostFrequentNums = new StringBuilder("4");
        } else if (frequency4 == maxFreq) {
            mostFrequentNums.append("、4");
        }
        if (frequency5 > maxFreq) {
            maxFreq = frequency5;
            mostFrequentNums = new StringBuilder("5");
        } else if (frequency5 == maxFreq) {
            mostFrequentNums.append("、5");
        }
        if (frequency6 > maxFreq) {
            maxFreq = frequency6;
            mostFrequentNums = new StringBuilder("6");
        } else if (frequency6 == maxFreq) {
            mostFrequentNums.append("、6");
        }
        if (frequency7 > maxFreq) {
            maxFreq = frequency7;
            mostFrequentNums = new StringBuilder("7");
        } else if (frequency7 == maxFreq) {
            mostFrequentNums.append("、7");
        }
        if (frequency8 > maxFreq) {
            maxFreq = frequency8;
            mostFrequentNums = new StringBuilder("8");
        } else if (frequency8 == maxFreq) {
            mostFrequentNums.append("、8");
        }
        if (frequency9 > maxFreq) {
            maxFreq = frequency9;
            mostFrequentNums = new StringBuilder("9");
        } else if (frequency9 == maxFreq) {
            mostFrequentNums.append("、9");
        }
        if (frequency10 > maxFreq) {
            maxFreq = frequency10;
            mostFrequentNums = new StringBuilder("10");
        } else if (frequency10 == maxFreq) {
            mostFrequentNums.append("、10");
        }

        System.out.printf("\n出现次数最多的数字是:%s,共出现%d次%n", mostFrequentNums, maxFreq);
    }
}

代码优化提示:后续可使用长度为11的int数组替代10个独立的frequency变量,遍历数组即可完成最大值统计,无需逐行编写if判断,代码可读性和可维护性会更高。

内容的提问来源于stack exchange,提问作者Jake45

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:30:56