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

如何在String[][]网格中查询选中点8邻域内的E或P元素?

检查网格点位8邻域是否存在E或P的实现方案

嘿,这问题我熟!要搞定这个8邻域检索的需求,核心就是处理边界合法性+遍历所有方向,我给你拆解成可落地的步骤和代码示例:

核心思路

  1. 定义8个邻域的坐标偏移量:把上下左右、四个对角线的相对坐标列出来,不用硬写8次重复判断
  2. 边界校验:每个偏移后的坐标必须落在网格的有效范围内(不能小于0,也不能超过网格的行/列数)
  3. 遍历判断:对每个合法的邻域点位,检查值是否为E或P,找到匹配项就直接返回结果

代码实现(Java示例)

假设你的网格是String[][] grid,选中点位的行是targetRow、列是targetCol,可以写一个实用的工具方法:

public boolean hasEorPInNeighbors(String[][] grid, int targetRow, int targetCol) {
    // 先处理网格为空或目标点位不合法的异常情况
    if (grid == null || grid.length == 0 || targetRow < 0 || targetRow >= grid.length) {
        return false;
    }
    String[] targetRowArr = grid[targetRow];
    if (targetRowArr == null || targetCol < 0 || targetCol >= targetRowArr.length) {
        return false;
    }

    // 定义8个邻域的坐标偏移:[行偏移量, 列偏移量]
    int[][] directions = {
        {-1, -1}, {-1, 0}, {-1, 1},
        {0, -1},          {0, 1},
        {1, -1},  {1, 0}, {1, 1}
    };

    // 遍历每个方向的邻域
    for (int[] dir : directions) {
        int neighborRow = targetRow + dir[0];
        int neighborCol = targetCol + dir[1];

        // 检查邻域坐标是否在网格合法范围内
        if (neighborRow >= 0 && neighborRow < grid.length) {
            String[] neighborRowArr = grid[neighborRow];
            if (neighborCol >= 0 && neighborCol < neighborRowArr.length) {
                String value = neighborRowArr[neighborCol];
                // 判断是否匹配E或P,如需忽略大小写可改用equalsIgnoreCase
                if ("E".equals(value) || "P".equals(value)) {
                    return true;
                }
            }
        }
    }

    // 遍历完所有邻域都未找到匹配项
    return false;
}

额外注意事项

  • 如果你的网格是不规则的(行长度不一致),代码里的neighborRowArr.length判断能避免数组越界问题
  • 要是需要支持大小写不敏感匹配(比如e或p也符合条件),把判断逻辑改成"E".equalsIgnoreCase(value) || "P".equalsIgnoreCase(value)即可
  • 可以根据业务需求调整逻辑:比如把找到第一个匹配就返回,改成收集所有匹配的邻域点位,灵活性拉满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:40:12