Java类与布尔数组问题:实现骰子掷出1-6各一次的停止逻辑
解决用布尔数组检测骰子1-6点数全出现的问题
我看了你现在的代码,核心问题出在把骰子的整数点数和布尔数组的元素值做比较,这完全不对,而且代码只执行了一次掷骰子就结束,也没拆分出三个类。咱们一步步来修正:
首先,先确认Die类的实现(你说已有这个类,这里给出一个标准版本方便后续使用):
public class Die { private int faceValue; private Random random; public Die() { random = new Random(); roll(); // 创建时就先掷一次骰子 } public void roll() { // 生成1到6的随机数,对应骰子点数 faceValue = random.nextInt(6) + 1; } public int getFaceValue() { return faceValue; } }
接下来,创建第二个类AllDiceValuesChecker,专门负责处理“检测所有点数是否出现”的逻辑,这里就用到布尔数组:
import java.util.Random; public class AllDiceValuesChecker { // 布尔数组索引0不用,1-6对应骰子的1-6点,默认都是false(未出现) private boolean[] seenValues = new boolean[7]; private Die die = new Die(); // 核心方法:持续掷骰子直到所有点数都出现 public void rollUntilAllSeen() { int rollTimes = 0; // 只要还有点数没出现,就继续掷 while (!isAllValuesSeen()) { die.roll(); rollTimes++; int currentPoint = die.getFaceValue(); // 关键:用当前点数作为数组索引,标记为已出现 seenValues[currentPoint] = true; System.out.printf("第%d次掷出:%d%n", rollTimes, currentPoint); } System.out.println("🎉 所有1-6的点数都已经掷出来啦!"); } // 辅助方法:检查1-6点是否都已标记为true private boolean isAllValuesSeen() { for (int i = 1; i <= 6; i++) { // 只要有一个点数没出现,就返回false if (!seenValues[i]) { return false; } } return true; } }
最后,创建第三个测试类DiceTest,作为程序的入口:
public class DiceTest { public static void main(String[] args) { AllDiceValuesChecker checker = new AllDiceValuesChecker(); checker.rollUntilAllSeen(); } }
关键修正点说明
- 布尔数组关联点数:不再把点数和数组元素值比较,而是直接用点数作为数组的索引(比如掷出3,就操作
seenValues[3]),这样就能准确标记对应点数是否出现 - 循环逻辑:用
while循环持续掷骰子,直到isAllValuesSeen()返回true(所有点数都出现) - 类拆分:严格分成三个类:
Die(骰子基础类)、AllDiceValuesChecker(业务逻辑类)、DiceTest(测试入口类),满足你的要求
内容的提问来源于stack exchange,提问作者Stacyx9
相关产品推荐
相关产品推荐

