如何用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
相关产品推荐
相关产品推荐

