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

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();
    }
}

代码解析

  1. 边界处理:先判断数组是否为空或行列数不足4,直接返回false,避免后续越界错误。
  2. 方向检测:每个方向的遍历都严格控制范围,确保每次检查的四个元素都在数组边界内。
  3. 提前返回:一旦找到任意一组连续四个相同元素,立即返回true,无需继续遍历,提升效率。
  4. 测试程序:通过Scanner获取用户输入,构建二维数组后调用检测方法,根据结果输出对应信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:20:25