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

如何在For循环中实现多Try-Catch块?解决二维数组匹配异常

解决思路与修正代码

核心问题分析

你当前的代码存在三个关键问题:

  1. continue的错误使用:catch块里的continue会直接跳转到下一个j的循环,导致当前元素的其他相邻方向(比如触发i+1异常后,i-1、j-1等方向)根本没机会检查。
  2. 提前返回false:内层循环里检查完一个元素的四个方向后直接return false,会导致只要第一个元素没匹配,就直接终止整个流程,完全没遍历后续元素。
  3. 用异常处理控制逻辑:异常应处理意外情况,而非正常的边界判断,这样既低效又容易出错。

修正方案:先做索引合法性判断,再比较值

直接在访问相邻元素前,判断索引是否在0 <= 索引 < b.size()的范围内,从根源上避免越界异常,同时保证当前元素的所有方向都能被检查到。

修正后的代码

for (int i = 0; i < b.size(); i++) {
    for (int j = 0; j < b.size(); j++) {
        int currentValue = b.tile(i, j).value();
        
        // 检查下方元素(i+1,j)
        if (i + 1 < b.size()) {
            if (currentValue == b.tile(i + 1, j).value()) {
                return true;
            }
        }
        
        // 检查上方元素(i-1,j)
        if (i - 1 >= 0) {
            if (currentValue == b.tile(i - 1, j).value()) {
                return true;
            }
        }
        
        // 检查左方元素(i,j-1)
        if (j - 1 >= 0) {
            if (currentValue == b.tile(i, j - 1).value()) {
                return true;
            }
        }
        
        // 检查右方元素(i,j+1)
        if (j + 1 < b.size()) {
            if (currentValue == b.tile(i, j + 1).value()) {
                return true;
            }
        }
    }
}
// 所有元素都检查完毕,没有找到匹配的相邻元素
return false;

关键优化点

  • 移除try-catch:用if判断索引合法性替代,避免异常带来的性能损耗和流程中断。
  • 保留完整检查:每个元素的四个方向都会被逐一检查,不会因为某个方向越界就跳过其他方向。
  • 修正返回逻辑:只有遍历完所有元素都没找到匹配,才返回false;只要找到任意一个匹配,立即返回true,保证效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:50:27