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

关于Java二维数组子数组判断函数的循环逻辑疑问

核心比对逻辑与迭代流程解析

整体逻辑说明

这段代码是在已找到photo[i][j]与sub[0][0]匹配的前提下,逐个校验sub剩余所有元素是否和photo对应区域的元素完全匹配——全部匹配就直接返回true,只要有一个不匹配就终止当前比对,继续寻找下一个可能的起始位置。

逐行代码逻辑拆解

while (flag) {
    if (row==sub.length-1&&col==sub[0].length-1)    
        return true;
    if (sub[row][col]==photo[i+row][j+col]) {
        if (col==sub[0].length-1) {         //last col
            col =0;
            row++;
        }
        else {
            col++;
        }
    }
    else
        flag =false;
}

1. 循环运行条件

while (flag):flag初始为true,只要当前比对没发现不匹配,就持续循环。

2. 匹配完成的终止判断

if (row==sub.length-1&&col==sub[0].length-1) return true;

  • 先判断当前是否已经遍历到sub的最后一个元素(行索引是最后一行,列索引也是最后一列),如果是,说明所有元素都匹配成功,直接返回true,确认sub是photo的子数组。

3. 元素比对与迭代控制

if (sub[row][col]==photo[i+row][j+col]):

  • 比对当前sub[row][col]和photo对应位置的元素(photo起始位置是(i,j),对应位置为i+row行、j+col列):
    • 匹配成功时:
      • 若col是sub的最后一列:当前行元素已全部比对完,将列索引重置为0,行索引加1,开始比对下一行的第一个元素。
      • 若col不是最后一列:列索引加1,继续比对当前行的下一个元素。
    • 匹配失败时:
      • 将flag设为false,终止当前while循环,回到外层循环寻找下一个可能的起始位置(i,j)。

迭代流程示例(以2行2列的sub为例)

假设sub是2行2列,且已找到photo[i][j] == sub[0][0]:

  1. 初始row=0, col=1,进入循环:
    • 先判断是否是最后一个元素((0,1)不是),比对sub[0][1]和photo[i][j+1]。
    • 若匹配:因为col是最后一列,所以col=0, row=1。
  2. 下一次循环:
    • 判断是否是最后一个元素((1,0)不是),比对sub[1][0]和photo[i+1][j]。
    • 若匹配:col不是最后一列,col=1。
  3. 下一次循环:
    • 判断是否是最后一个元素((1,1)是),直接返回true。

如果中间任何一步比对失败,flag设为false,循环终止,回到外层寻找下一个起始点。

内容的提问来源于stack exchange,提问作者Itamar B-E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:51:15