Java邻接矩阵代码中布尔类型增强for循环的运行原理解析
Java邻接矩阵布尔增强for循环逻辑说明
首先明确代码上下文基础:
- 该实现中
adjMatrix是boolean[][]类型的二维数组,作为无向图的邻接矩阵存储结构:数组行、列下标均对应图的顶点编号,adjMatrix[x][y] = true表示顶点x与y之间存在边,false表示两顶点无连接。
你疑问的代码片段如下:
for (boolean j : adjMatrix[i]) { s.append((j ? 1 : 0) + " "); }
逐部分拆解运行逻辑:
- 增强for循环(for-each)适配规则:Java中增强for循环可直接遍历数组或实现了
Iterable接口的集合,无需手动维护遍历下标、循环终止条件。此处外层循环已经锁定当前处理的是邻接矩阵的第i行,adjMatrix[i]本身就是一个长度等于总顶点数的一维布尔数组,存储的是顶点i与其余所有顶点的边连接状态。 - 循环变量
boolean j的含义:循环会按从前往后的顺序,依次取出adjMatrix[i]一维数组中的每一个布尔值,赋值给临时变量j:第一次迭代取adjMatrix[i][0],第二次取adjMatrix[i][1],直到取完该行所有元素。 - 循环体逻辑:
(j ? 1 : 0)是Java三元运算符写法,逻辑为:如果当前取到的j为true(两顶点有边)则返回1,为false(两顶点无边)则返回0;后续拼接空格是为了让打印出的矩阵数字之间有间隔,保证排版清晰。
等价普通for循环写法
上述增强for循环的运行逻辑和以下普通下标遍历完全一致,可以对照理解:
for (int col = 0; col < adjMatrix[i].length; col++) { boolean j = adjMatrix[i][col]; s.append((j ? 1 : 0) + " "); }
举个实际运行示例:如果图共有3个顶点,顶点0仅和顶点1相连,那么adjMatrix[0]存储的数组为[false, true, false],遍历该行后拼接出的字符串片段为0: 0 1 0 ,符合邻接矩阵“有边记1、无边记0”的打印惯例。
内容的提问来源于stack exchange,提问作者subham_1
相关产品推荐
相关产品推荐

