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

如何用Java循环遍历二维数组的相邻位置(基于存储相邻位置的数组)

遍历二维数组所有位置的不同相邻元素内容

完整实现代码

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class AdjacentTraversal {
    // 你已定义的相邻坐标获取函数(这里给出示例实现,可替换为你自己的版本)
    public static int[][] adyacents(int rows, int columns, int offsetRow, int offsetCol) {
        List<int[]> adjacentList = new ArrayList<>();
        
        // 遍历8个可能的相邻方向(上下左右+四个对角线)
        for (int deltaRow = -1; deltaRow <= 1; deltaRow++) {
            for (int deltaCol = -1; deltaCol <= 1; deltaCol++) {
                // 跳过当前位置自身
                if (deltaRow == 0 && deltaCol == 0) continue;
                
                int newRow = offsetRow + deltaRow;
                int newCol = offsetCol + deltaCol;
                
                // 检查坐标是否在数组边界内
                if (newRow >= 0 && newRow < rows && newCol >= 0 && newCol < columns) {
                    adjacentList.add(new int[]{newRow, newCol});
                }
            }
        }
        
        return adjacentList.toArray(new int[0][]);
    }

    public static void main(String[] args) {
        char[][] example = {
                {'A', 'B', 'C'},
                {'D', 'E', 'F'},
                {'G', 'H', 'I'}
        };
        int totalRows = example.length;
        int totalCols = example[0].length;

        // 用来存储所有不同的相邻元素内容(可选)
        Set<Character> uniqueAdjacentElements = new HashSet<>();

        // 遍历主数组的每一个位置
        for (int currentRow = 0; currentRow < totalRows; currentRow++) {
            for (int currentCol = 0; currentCol < totalCols; currentCol++) {
                // 获取当前位置的所有相邻坐标
                int[][] adjacentCoords = adyacents(totalRows, totalCols, currentRow, currentCol);
                
                // 遍历每个相邻坐标,读取对应元素
                for (int[] coord : adjacentCoords) {
                    int adjRow = coord[0];
                    int adjCol = coord[1];
                    char element = example[adjRow][adjCol];
                    
                    // 打印当前位置的相邻元素(可根据需求调整输出逻辑)
                    System.out.printf("主位置(%d,%d)的相邻元素: %c%n", currentRow, currentCol, element);
                    
                    // 将元素加入Set实现去重
                    uniqueAdjacentElements.add(element);
                }
            }
        }

        // 输出所有不重复的相邻元素内容
        System.out.println("\n所有不同的相邻元素内容:");
        uniqueAdjacentElements.forEach(c -> System.out.print(c + " "));
    }
}

关键说明

  • 外层嵌套循环覆盖二维数组的每一个位置,确保没有遗漏任何元素的相邻检查。
  • adyacents函数自动过滤越界坐标,避免数组索引越界异常。
  • 若只需遍历每个位置的相邻元素、不需要去重,可直接去掉Set相关代码,仅保留相邻元素的读取逻辑。
  • 示例中的adyacents实现是8邻域(包含对角线)逻辑,如需4邻域(仅上下左右),修改方向遍历范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:11:07