
本文详解如何用java实现二维数组中水平、垂直及对角线方向上四个连续相等数字的检测逻辑,包含完整可运行代码、逐向扫描策略说明、常见陷阱分析与优化建议。
本文详解如何用java实现二维数组中水平、垂直及对角线方向上四个连续相等数字的检测逻辑,包含完整可运行代码、逐向扫描策略说明、常见陷阱分析与优化建议。
在解决“四连等值检测”这类二维数组问题时,核心在于系统性地遍历所有可能形成长度为4的连续序列的方向:水平(行)、垂直(列)、主对角线(左上→右下)和副对角线(右上→左下)。关键不是暴力穷举所有4元组,而是采用“滑动计数”思想——对每个方向,逐个比较相邻元素,维护当前连续相等个数,一旦达到3次匹配(即共4个相同值),立即返回 true。
以下为经过修正与增强的完整解决方案(注意:原答案中对角线逻辑存在严重索引错误,已全面重写):
import java.util.Scanner;
public class ConsecutiveFourDetector {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter number of rows and columns: ");
int rows = scanner.nextInt();
int cols = scanner.nextInt();
int[][] grid = new int[rows][cols];
for (int i = 0; i = 0
if (grid[i][j] == grid[i+1][j-1] &&
grid[i][j] == grid[i+2][j-2] &&
grid[i][j] == grid[i+3][j-3]) {
return true;
}
}
}
return false;
}
}
✅ 设计亮点说明:
- 边界安全:所有循环均使用
- 逻辑清晰:四类方向独立处理,结构扁平易读,无状态变量干扰(如原答案中误用 ++column 导致索引错乱)。
- 时间效率:O(R×C) 时间复杂度,每个有效起始点仅做3次比较,无需额外空间。
⚠️ 重要注意事项:
- 原答案中对角线扫描逻辑存在致命缺陷:++column 在循环内修改列索引,破坏遍历结构,且未正确处理行列边界,会导致 ArrayIndexOutOfBoundsException 或漏检。
- 不要试图用“计数器累加”替代显式四元比较——后者语义明确、边界可控、调试友好。
- 若需返回具体数值或坐标,可在匹配处记录 grid[i][j] 及 (i,j),无需重构主逻辑。
该方案已通过全部提供测试用例验证(包括6×7网格中第6行末尾四个3的水平匹配),稳健支持任意 R≥4, C≥4 的输入规模。掌握此模式,可轻松扩展至“五连”“八皇后冲突检测”等同类二维扫描问题。











