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

Java硬币翻转程序开发求助:随机数生成与统计功能完善

解决方案

现有代码的核心问题

  1. 随机数范围错误:当前代码用(int)(Math.random() * 6 + 1)生成的是1-6的整数,导致7-10永远不会出现,这就是你输出里7-10次数为0的原因。
  2. 未使用数组存储所有翻转结果:任务要求将所有生成的数值存入数组,而你用了HashMap,不符合要求。
  3. 未实现指定的random(a,b)和count(n,arr)方法。

完整实现代码

import java.util.Scanner;

public class CoinFlippingTest {

    // 生成[a, b]之间的随机整数
    public static int random(int a, int b) {
        return a + (int) (Math.random() * (b - a + 1));
    }

    // 统计数组arr中数值n的出现次数
    public static int count(int n, int[] arr) {
        int count = 0;
        for (int num : arr) {
            if (num == n) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        try (Scanner inputReader = new Scanner(System.in)) {
            System.out.println("How many times do you want to flip the coin?: ");
            int amount = inputReader.nextInt();
            
            // 限制最多1000次翻转
            if (amount > 1000) {
                amount = 1000;
                System.out.println("Maximum flips allowed is 1000, setting to 1000.");
            } else if (amount <= 0) {
                System.out.println("Invalid number, exiting.");
                return;
            }

            // 创建数组存储所有翻转结果
            int[] flipResults = new int[amount];

            // 生成随机数并填充数组
            for (int i = 0; i < amount; i++) {
                flipResults[i] = random(1, 10);
            }

            // 1. 统计10个随机数各自的出现次数
            System.out.println("\n--- 各数字出现次数 ---");
            int[] numberCounts = new int[11]; // 索引1-10对应数字1-10
            for (int i = 1; i <= 10; i++) {
                numberCounts[i] = count(i, flipResults);
                System.out.println(i + ": " + numberCounts[i]);
            }

            // 2. 找出出现次数最多的数字
            System.out.println("\n--- 出现次数最多的数字 ---");
            int maxCount = 0;
            StringBuilder mostFrequentNumbers = new StringBuilder();
            for (int i = 1; i <= 10; i++) {
                if (numberCounts[i] > maxCount) {
                    maxCount = numberCounts[i];
                    mostFrequentNumbers.setLength(0);
                    mostFrequentNumbers.append(i);
                } else if (numberCounts[i] == maxCount) {
                    mostFrequentNumbers.append(", ").append(i);
                }
            }
            System.out.println("数字: " + mostFrequentNumbers + ",出现次数: " + maxCount);

            // 3. 统计正反面出现频率
            System.out.println("\n--- 正反面统计 ---");
            int headsCount = 0; // 偶数代表正面
            int tailsCount = 0; // 奇数代表反面
            for (int num : flipResults) {
                if (num % 2 == 0) {
                    headsCount++;
                } else {
                    tailsCount++;
                }
            }
            System.out.println("正面次数: " + headsCount);
            System.out.println("反面次数: " + tailsCount);
            if (headsCount > tailsCount) {
                System.out.println("正面出现更频繁");
            } else if (tailsCount > headsCount) {
                System.out.println("反面出现更频繁");
            } else {
                System.out.println("正反面出现次数相同");
            }
        }
    }
}

代码说明

  1. random(a,b)方法:通过a + (int)(Math.random()*(b-a+1))确保生成的随机数包含a和b的边界值,解决了原代码范围错误的问题。
  2. count(n,arr)方法:遍历数组逐个比对数值,返回目标数的出现次数,符合任务要求。
  3. 数组存储结果:用flipResults数组保存每次翻转的随机数,满足任务中“将所有生成的数值存入数组”的要求。
  4. 功能实现:
    • 统计各数字次数:调用count方法遍历1-10每个数字的出现次数;
    • 找出最频繁数字:遍历次数数组,记录最大次数对应的所有数字(处理多个数字次数相同的情况);
    • 正反面统计:遍历结果数组,区分奇偶统计次数并比较。
  5. 输入限制:添加了最多1000次的限制,同时处理了非正输入的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:45:36