Java硬币翻转程序开发求助:随机数生成与统计功能完善
解决方案
现有代码的核心问题
- 随机数范围错误:当前代码用
(int)(Math.random() * 6 + 1)生成的是1-6的整数,导致7-10永远不会出现,这就是你输出里7-10次数为0的原因。 - 未使用数组存储所有翻转结果:任务要求将所有生成的数值存入数组,而你用了HashMap,不符合要求。
- 未实现指定的
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("正反面出现次数相同"); } } } }
代码说明
- random(a,b)方法:通过
a + (int)(Math.random()*(b-a+1))确保生成的随机数包含a和b的边界值,解决了原代码范围错误的问题。 - count(n,arr)方法:遍历数组逐个比对数值,返回目标数的出现次数,符合任务要求。
- 数组存储结果:用
flipResults数组保存每次翻转的随机数,满足任务中“将所有生成的数值存入数组”的要求。 - 功能实现:
- 统计各数字次数:调用
count方法遍历1-10每个数字的出现次数; - 找出最频繁数字:遍历次数数组,记录最大次数对应的所有数字(处理多个数字次数相同的情况);
- 正反面统计:遍历结果数组,区分奇偶统计次数并比较。
- 统计各数字次数:调用
- 输入限制:添加了最多1000次的限制,同时处理了非正输入的情况。
内容的提问来源于stack exchange,提问作者Soohyun Kang
相关产品推荐
相关产品推荐

