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); } }
补全逻辑说明
无需改动原有统计逻辑,在正反面结果输出代码后追加最高频数字比对逻辑即可,同时兼容多个数字频次并列最高的场景:
- 初始化变量存储当前遍历到的最大频次、对应最高频数字结果
- 依次将2-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); // 统计出现次数最多的数字 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
相关产品推荐
相关产品推荐

