Java彩票游戏:如何将随机生成号码与用户输入号码逐一比对?
Java彩票游戏匹配统计解决方案
首先,把用户输入的5个数字存入数组,能更方便地和中奖号码数组做比对,避免单独处理5个变量的繁琐。下面分两种常见的彩票匹配规则给出实现方案:
规则1:位置对应匹配(每个位置的数字与中奖号码对应位置一致才算匹配)
这种规则下,遍历两个数组的相同索引位置,逐一比对并统计匹配数即可:
import java.util.Scanner; import java.util.Random; public class Lotterygame { public static void main (String[] args) { // 用数组存储用户输入,替代单独变量 int[] userNumbers = new int[5]; int matchCount = 0; Scanner input = new Scanner(System.in); Random random = new Random(); int[] winningNumbers = new int[5]; for (int i = 0; i < 5; i++) { winningNumbers[i] = random.nextInt(100); } // 循环获取用户输入并存入数组 for (int i = 0; i < 5; i++) { System.out.printf("Enter the %dth number: ", i+1); userNumbers[i] = input.nextInt(); } System.out.print("The winning numbers are: "); for (int number : winningNumbers) { System.out.print(" " + number); } System.out.print("\nYour numbers are: "); for (int number : userNumbers) { System.out.print(" " + number); } // 统计位置对应的匹配数 for (int i = 0; i < 5; i++) { if (winningNumbers[i] == userNumbers[i]) { matchCount++; } } // 根据匹配数输出对应结果 System.out.println("\n\nMatch count: " + matchCount); if (matchCount == 5) { System.out.println("Congratulations! You won the grand prize!"); } else if (matchCount == 4) { System.out.println("Great! You matched 4 numbers."); } else if (matchCount == 3) { System.out.println("Nice! You matched 3 numbers."); } else if (matchCount == 2) { System.out.println("You matched 2 numbers."); } else if (matchCount == 1) { System.out.println("You matched 1 number."); } else { System.out.println("No matches, better luck next time!"); } input.close(); } }
规则2:数字存在即匹配(不考虑位置,用户输入的数字只要在中奖号码里就算匹配,需去重避免重复统计)
如果是这种规则,要检查每个用户输入的数字是否存在于中奖号码数组中,同时标记已匹配的中奖号码,防止重复计数:
import java.util.Scanner; import java.util.Random; public class Lotterygame { public static void main (String[] args) { int[] userNumbers = new int[5]; int matchCount = 0; Scanner input = new Scanner(System.in); Random random = new Random(); int[] winningNumbers = new int[5]; for (int i = 0; i < 5; i++) { winningNumbers[i] = random.nextInt(100); } for (int i = 0; i < 5; i++) { System.out.printf("Enter the %dth number: ", i+1); userNumbers[i] = input.nextInt(); } System.out.print("The winning numbers are: "); for (int number : winningNumbers) { System.out.print(" " + number); } System.out.print("\nYour numbers are: "); for (int number : userNumbers) { System.out.print(" " + number); } // 统计数字存在的匹配数(去重) boolean[] counted = new boolean[5]; // 标记中奖号码是否已被计数 for (int userNum : userNumbers) { for (int j = 0; j < 5; j++) { if (!counted[j] && userNum == winningNumbers[j]) { matchCount++; counted[j] = true; break; // 找到匹配后跳出内层循环,避免重复计数 } } } // 输出结果 System.out.println("\n\nMatch count: " + matchCount); if (matchCount == 5) { System.out.println("Congratulations! You won the grand prize!"); } else if (matchCount == 4) { System.out.println("Great! You matched 4 numbers."); } else if (matchCount == 3) { System.out.println("Nice! You matched 3 numbers."); } else if (matchCount == 2) { System.out.println("You matched 2 numbers."); } else if (matchCount == 1) { System.out.println("You matched 1 number."); } else { System.out.println("No matches, better luck next time!"); } input.close(); } }
核心优化点
- 用数组存储用户输入,通过循环遍历比对,比单独处理
firstDigit等变量更简洁易维护 - 根据彩票规则选择对应匹配逻辑,确保统计结果符合需求
- 用
if-else分支根据匹配数输出不同反馈,逻辑清晰直观
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

