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

数独3x3区块验证方法中变量i递增异常及循环次数不符问题

数独3x3区块验证代码错误排查

核心问题分析

你的代码存在两个关键问题:

1. 循环嵌套与比较逻辑冗余且错误

  • 四层循环会导致重复比较:比如单元格(i,j)会和(k,l)比较一次,当循环到(k,l)时又会和(i,j)再比较一次,产生大量无效判断。
  • 判断条件i != k && j != l逻辑错误:这个条件只会检测行和列都不同的单元格,漏掉了同一行不同列(i=k但j≠l)、同一列不同行(i≠k但j=l)的情况。比如区块内同一行有两个相同数字,这个条件根本不会触发判断,导致重复值无法被检测出来。

2. 未处理越界值检查

你的需求里提到要检查越界值(非1-9的数字),但当前代码完全没有这部分逻辑,会导致不符合规则的数字被放过。

修复后的代码

用集合记录已出现的数字,遍历一次区块即可完成重复值+越界值的检查,逻辑更简洁高效:

public boolean isValidBox(int row, int col) {
    Set<Integer> seen = new HashSet<>();
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            int num = grid[row + i][col + j];
            // 检查越界值(数独合法值为1-9)
            if (num < 1 || num > 9) {
                return false;
            }
            // 检查重复值:add返回false说明数字已存在
            if (!seen.add(num)) {
                return false;
            }
        }
    }
    return true;
}

原代码执行次数与变量异常说明

原代码四层循环总次数是3*3*3*3=81次,你提到的243次可能是多次调用方法的累计执行次数。而你观察到的变量i递增异常,大概率是调试时的视觉误差——四层循环嵌套下,内层循环的重复执行会覆盖调试器的变量显示,实际i是按0→1→2正常递增的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:50:21