如何为Java硬币翻转程序添加数字频次统计与众数识别功能?
优化后的Java硬币翻转程序
以下是满足需求的优化代码,实现了1-10每个数字的次数统计,并找出出现次数最多的数字:
import java.util.*; public class GreatCoinFlipping { public static void main(String[] args) { System.out.println("How many times do you want to flip the coin? : "); Scanner sc = new Scanner(System.in); int amount = sc.nextInt(); int[] arrNum = new int[amount]; // 计数数组,索引1-10对应数字1-10的出现次数 int[] countArr = new int[11]; int even = 0, odd = 0; for (int i = 0; i < amount ; i++) { arrNum[i] = (int)(Math.random() * 10 + 1); System.out.println(arrNum[i]); // 统计当前数字的出现次数 countArr[arrNum[i]]++; // 保留原有的正反面统计逻辑 if (arrNum[i] % 2 == 0) even++; else odd++; } // 输出正反面统计结果 System.out.println("Head: " + even + ", Tail: " + odd); // 输出1-10每个数字的出现次数 System.out.println("\n各数字出现次数:"); for (int num = 1; num <= 10; num++) { System.out.printf("数字%d:%d次%n", num, countArr[num]); } // 找出出现次数最多的数字(处理多个数字次数相同的情况) int maxCount = 0; List<Integer> topNums = new ArrayList<>(); for (int num = 1; num <= 10; num++) { if (countArr[num] > maxCount) { maxCount = countArr[num]; topNums.clear(); topNums.add(num); } else if (countArr[num] == maxCount) { topNums.add(num); } } // 输出高频数字结果 System.out.println("\n出现次数最多的数字:"); if (topNums.size() == 1) { System.out.printf("数字%d,共出现%d次%n", topNums.get(0), maxCount); } else { System.out.print("数字"); for (int i = 0; i < topNums.size(); i++) { if (i > 0) System.out.print("、"); System.out.print(topNums.get(i)); } System.out.printf(",均出现%d次%n", maxCount); } sc.close(); } }
关键优化点
- 计数数组统计:创建长度为11的
countArr,直接用数字本身作为索引,通过countArr[随机数]++完成高效计数,避免复杂的条件判断 - 多数字高频处理:用列表存储所有出现次数最多的数字,解决多个数字出现次数相同的场景
- 保留原有功能:保留了原程序的正反面统计逻辑,同时新增了数字统计和高频数字查找功能
内容的提问来源于stack exchange,提问作者Soohyun Kang
相关产品推荐
相关产品推荐

