You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测二维数组中的重复骰子投掷结果并重新投掷?

解决骰子投掷结果重复存入数组的问题

你的核心问题是没有在投掷后检查目标数组位置是否已被占用,导致重复的骰子组合会覆盖之前的结果。下面是最简便的修改方案:

修改后的代码

把原有的单次投掷逻辑改成循环检测,只有找到未被使用的位置才完成一次计数:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:05:34