Java作业求解:检测二维数组中连续四个相同数字
解决方案:二维数组连续四元素检测的Java实现
核心方法实现思路
要完成isConsecutiveFour方法,需要覆盖四个方向的连续检测:
- 水平方向:同一行内连续四个元素
- 垂直方向:同一列内连续四个元素
- 对角线1(左上→右下):行和列同步递增的连续四个元素
- 对角线2(右上→左下):行递增、列递减的连续四个元素
每个方向的检测都要注意边界控制,避免数组越界:
- 水平检测:每行仅需遍历到
列数-4的位置(因为后续需要3个连续元素) - 垂直检测:每列仅需遍历到
行数-4的位置 - 对角线1:行遍历到
行数-4,列遍历到列数-4 - 对角线2:行遍历到
行数-4,列从3开始遍历到最后一列(需要向左取3个元素)
完整代码实现
核心方法代码
public class ConsecutiveFourChecker { public static boolean isConsecutiveFour(int[][] values) { // 处理空数组或行列数不足4的情况 if (values == null || values.length < 4 || values[0].length < 4) { return false; } int rows = values.length; int cols = values[0].length; // 检测水平方向 for (int i = 0; i < rows; i++) { for (int j = 0; j <= cols - 4; j++) { int val = values[i][j]; if (val == values[i][j+1] && val == values[i][j+2] && val == values[i][j+3]) { return true; } } } // 检测垂直方向 for (int i = 0; i <= rows - 4; i++) { for (int j = 0; j < cols; j++) { int val = values[i][j]; if (val == values[i+1][j] && val == values[i+2][j] && val == values[i+3][j]) { return true; } } } // 检测左上到右下的对角线 for (int i = 0; i <= rows - 4; i++) { for (int j = 0; j <= cols - 4; j++) { int val = values[i][j]; if (val == values[i+1][j+1] && val == values[i+2][j+2] && val == values[i+3][j+3]) { return true; } } } // 检测右上到左下的对角线 for (int i = 0; i <= rows - 4; i++) { for (int j = 3; j < cols; j++) { int val = values[i][j]; if (val == values[i+1][j-1] && val == values[i+2][j-2] && val == values[i+3][j-3]) { return true; } } } // 所有方向都未找到连续四个相同元素 return false; } }
测试程序代码
import java.util.Scanner; public class TestConsecutiveFour { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入行数和列数 System.out.print("请输入数组的行数: "); int rows = scanner.nextInt(); System.out.print("请输入数组的列数: "); int cols = scanner.nextInt(); // 输入数组元素 int[][] values = new int[rows][cols]; System.out.println("请输入数组元素(按行输入,每行" + cols + "个数字):"); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { values[i][j] = scanner.nextInt(); } } // 调用检测方法并输出结果 boolean hasConsecutiveFour = ConsecutiveFourChecker.isConsecutiveFour(values); if (hasConsecutiveFour) { System.out.println("数组中存在水平、垂直或对角线方向连续四个相同的数值。"); } else { System.out.println("数组中不存在连续四个相同的数值。"); } scanner.close(); } }
代码解析
- 边界处理:先判断数组是否为空或行列数不足4,直接返回false,避免后续越界错误。
- 方向检测:每个方向的遍历都严格控制范围,确保每次检查的四个元素都在数组边界内。
- 提前返回:一旦找到任意一组连续四个相同元素,立即返回true,无需继续遍历,提升效率。
- 测试程序:通过Scanner获取用户输入,构建二维数组后调用检测方法,根据结果输出对应信息。
内容的提问来源于stack exchange,提问作者Silly Piggy
相关产品推荐
相关产品推荐

