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

如何修复Java中检查骰子数组连续数方法的数组越界问题?

首先,你的代码存在三个核心问题:

  1. 数组越界:循环条件i < arr.length会让i遍历到最后一个索引(4),此时arr[i+1]访问的是数组外的元素,必须把循环条件改为i < arr.length - 1,只遍历到倒数第二个元素。
  2. 逻辑错误:arr[i]++是修改数组中的元素值,而不是比较“下一个数是否等于当前数+1”,正确的比较应该是arr[i+1] == arr[i] + 1;同时你没有处理重复数字的情况,比如连续两个相同的骰子数会错误增加计数。
  3. 计数逻辑缺失:遇到不连续的数字时,没有重置连续计数器,导致错误累计。

下面提供两种经过验证的修正方案,适用于5枚骰子的场景:


方案一:修正原逻辑,逐一遍历判断

这种方案保留你原有的遍历思路,修复所有问题并优化效率:

import java.util.Arrays;

public class DiceChecker {
    public static boolean checkFourConsecutive(int[] dice) {
        if (dice.length != 5) {
            return false; // 确保输入是5枚骰子的结果
        }
        Arrays.sort(dice);
        int consecutiveCount = 1;
        // 遍历到倒数第二个元素,避免数组越界
        for (int i = 0; i < dice.length - 1; i++) {
            if (dice[i+1] == dice[i]) {
                // 重复数字,不影响连续计数,直接跳过
                continue;
            } else if (dice[i+1] == dice[i] + 1) {
                consecutiveCount++;
                // 一旦连续数达到4,直接返回true,无需继续遍历
                if (consecutiveCount >= 4) {
                    return true;
                }
            } else {
                // 遇到不连续数字,重置计数器
                consecutiveCount = 1;
            }
        }
        // 检查最后一段连续序列是否达标(比如最后四个骰子连续)
        return consecutiveCount >= 4;
    }
}

关键说明:

  • 先校验数组长度,符合5枚骰子的输入要求
  • 排序后遍历,遇到重复数字直接跳过,不干扰连续计数
  • 每遇到连续数字就增加计数,达到4时立即返回,提升效率
  • 遇到不连续数字时重置计数器,避免错误累计

方案二:利用去重+连续数值判断

这种方案更简洁,核心思路是:先提取骰子中的唯一数字,再检查是否存在4个连续的数值:

import java.util.Arrays;
import java.util.stream.IntStream;

public class DiceChecker {
    public static boolean checkFourConsecutive(int[] dice) {
        if (dice.length != 5) {
            return false;
        }
        // 去重并排序,得到唯一的骰子数值列表
        int[] uniqueDice = IntStream.of(dice).distinct().sorted().toArray();
        
        // 如果唯一数字不足4个,直接排除
        if (uniqueDice.length < 4) {
            return false;
        }
        
        // 检查是否存在4个连续的数值
        for (int i = 0; i <= uniqueDice.length - 4; i++) {
            if (uniqueDice[i+3] == uniqueDice[i] + 3) {
                return true;
            }
        }
        return false;
    }
}

关键说明:

  • 去重后如果数字数量少于4,必然无法组成4个连续整数,直接返回false
  • 遍历唯一数字列表,只要找到任意一组4个连续的数值(最大数=最小数+3),就返回true
  • 这种方法能精准判断是否存在符合要求的连续数字组合,避免重复数字干扰

测试用例验证

骰子数组预期结果方案一结果方案二结果
[1,2,3,4,6]truetruetrue
[1,3,4,5,6]truetruetrue
[1,2,2,3,5]falsefalsefalse
[2,2,3,4,5]truetruetrue
[1,1,1,2,3]falsefalsefalse

内容的提问来源于stack exchange,提问作者Sogaria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:15:15