宾果游戏开发:如何判断array1与array2是否存在相同数字?
判断两个数组是否存在共同元素的解决方案
针对你宾果游戏开发中遇到的「判断用户输入数组(array1)是否包含随机数组(array2)任意数字」的问题,以下是几种实用的实现方案:
核心思路
本质是检查两个数组是否存在交集(即共同元素),不管元素位置。优先用集合实现,因为集合的查找效率远高于数组遍历;如果是新手,也可以用基础的遍历方式理解逻辑。
Python 实现
完整代码
import random # 获取用户输入的10个数字(含简单校验) array1 = list(map(int, input("请输入10个数字,用空格分隔:").split())) while len(array1) != 10: array1 = list(map(int, input("请输入恰好10个数字,用空格分隔:").split())) # 生成1-21之间的10个不重复随机数 array2 = random.sample(range(1, 22), 10) print("随机数组:", array2) # 方法1:集合交集(高效简洁) if set(array1) & set(array2): print("存在共同数字!") else: print("没有共同数字!") # 方法2:遍历检查(适合新手理解) has_common = False for num in array1: if num in array2: has_common = True break print("存在共同数字!" if has_common else "没有共同数字!")
说明
random.sample()确保生成的10个随机数不重复,符合宾果游戏的常规逻辑;- 集合交集操作
set1 & set2会返回所有共同元素,只要结果非空就说明存在交集; - 遍历方式逐个检查元素,找到匹配项后立即终止循环,减少不必要的计算。
Java 实现
完整代码
import java.util.ArrayList; import java.util.HashSet; import java.util.Random; import java.util.Scanner; public class BingoChecker { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); ArrayList<Integer> array1 = new ArrayList<>(); // 获取用户输入的10个数字 System.out.println("请输入10个数字,用空格分隔:"); while (array1.size() < 10) { array1.add(scanner.nextInt()); } // 生成1-21之间的10个不重复随机数 ArrayList<Integer> array2 = new ArrayList<>(); Random random = new Random(); while (array2.size() < 10) { int num = random.nextInt(21) + 1; // 生成1到21的随机数 if (!array2.contains(num)) { array2.add(num); } } System.out.println("随机数组:" + array2); // 用HashSet优化查找效率 HashSet<Integer> numSet = new HashSet<>(array1); boolean hasCommon = false; for (int num : array2) { if (numSet.contains(num)) { hasCommon = true; break; } } System.out.println(hasCommon ? "存在共同数字!" : "没有共同数字!"); } }
说明
- 用
HashSet存储用户输入的数字,将数组查找的O(n)时间复杂度降为O(1); - 生成随机数时通过
contains()确保不重复,避免宾果游戏中出现重复数字的问题。
内容的提问来源于stack exchange,提问作者babula40
相关产品推荐
相关产品推荐

