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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:15:52