咨询下述Java程序的运行逻辑 为何程序输出为2、3、4
代码执行逻辑与输出形成原理
首先明确程序初始的数组结构,逐索引对应值如下:
数组 my_array 索引-值映射: 索引:0 1 2 3 4 5 6 7 8 9 对应值:1 2 3 4 5 6 7 2 3 4
循环规则说明
程序采用两层嵌套循环做数组遍历,核心运行规则如下:
- 外层循环固定当前对比基准的位置
i,遍历范围是0到数组倒数第二个位置(循环条件为i < my_array.length-1,数组长度为10,因此i的取值为0、1、2...8) - 内层循环在固定基准i后,从i的下一个位置
j = i+1开始,一路遍历到数组最后一位(索引9) - 触发打印的判断逻辑:当i位置的值与j位置的值相等时,打印j位置的值。代码中额外写的
i != j判断属于冗余逻辑,因为内层j的起始值就是i+1,整个遍历过程中j永远大于i,两个索引不可能相等,该判断不影响运行结果。另外开头导入的java.util.Arrays包未在代码中实际使用,不影响程序执行。
逐轮遍历的打印触发过程
按循环顺序逐次拆解执行流程,对应输出的生成节点如下:
- i=0轮次:i位置对应数组值为1,内层j依次遍历1到9的位置,对应值为2、3、4、5、6、7、2、3、4,没有和1相等的元素,本轮无打印输出。
- i=1轮次:i位置对应数组值为2,内层j从索引2开始向后遍历:
- j取2(值3)、3(值4)、4(值5)、5(值6)、6(值7)时,对应值均和2不相等,不触发打印
- 走到j=7位置时,对应值为2,和i位置的基准值相等,满足打印条件,输出第一行内容
2 - 继续遍历j=8(值3)、j=9(值4),无匹配值,本轮循环结束。
- i=2轮次:i位置对应数组值为3,内层j从索引3开始向后遍历:
- j取3(值4)、4(值5)、5(值6)、6(值7)、7(值2)时,对应值均和3不相等,不触发打印
- 走到j=8位置时,对应值为3,和i位置的基准值相等,满足打印条件,输出第二行内容
3 - 继续遍历j=9(值4),无匹配值,本轮循环结束。
- i=3轮次:i位置对应数组值为4,内层j从索引4开始向后遍历:
- j取4(值5)、5(值6)、6(值7)、7(值2)、8(值3)时,对应值均和4不相等,不触发打印
- 走到j=9位置时,对应值为4,和i位置的基准值相等,满足打印条件,输出第三行内容
4 - 本轮遍历结束。
- 剩余i=4到i=8的轮次:i位置对应的数组值分别为5、6、7、2、3,向后遍历的剩余位置中没有和这些值相等的元素,全程不会触发打印。
结果本质总结
整个程序的核心逻辑是遍历数组中的重复元素,固定每个元素第一次出现的位置为对比基准,当后续遍历到相同值的元素时,直接打印该重复元素的值。在示例数组中,2、3、4三个值都分别在数组中出现了两次,因此刚好依次打印这三个值的第二次出现值,最终形成2、3、4的三行控制台输出。
内容的提问来源于stack exchange,提问作者Adith Krishnan
相关产品推荐
相关产品推荐

