如何检测二维数组中的重复骰子投掷结果并重新投掷?
解决骰子投掷结果重复存入数组的问题
你的核心问题是没有在投掷后检查目标数组位置是否已被占用,导致重复的骰子组合会覆盖之前的结果。下面是最简便的修改方案:
修改后的代码
把原有的单次投掷逻辑改成循环检测,只有找到未被使用的位置才完成一次计数:
public static String[][] updateArray(String[][] arr, int userInput) { int successfulRolls = 0; // 限制最大可投掷次数,避免无限循环(骰子组合共36种) if (userInput > 36) { throw new IllegalArgumentException("最多只能生成36个不重复的骰子组合"); } while (successfulRolls < userInput) { int roll1 = rollDice(); int roll2 = rollDice(); int xIdx = roll1 - 1; int yIdx = roll2 - 1; // 检查当前位置是否为初始状态(未被使用) if (arr[yIdx][xIdx].equals("0,0")) { String result = roll1 + "," + roll2; System.out.println("骰子结果:" + roll1 + " and " + roll2); arr[yIdx][xIdx] = result; successfulRolls++; } else { System.out.println("重复结果:" + roll1 + " and " + roll2 + ",重新投掷..."); } } return arr; }
核心改动说明
- 用
successfulRolls统计真正存入数组的不重复结果数,替代原有的循环次数计数,确保最终得到userInput个唯一结果 - 每次投掷后检查目标位置是否还是初始值
"0,0",只有未被占用时才写入数组并递增计数 - 添加了最大次数限制,防止当用户输入超过36(骰子组合总数)时进入无限循环
内容的提问来源于stack exchange,提问作者dstrix
相关产品推荐
相关产品推荐

