能否在for循环增减量块中编写条件判断控制多变量迭代?
解答
你想在for循环的增量/减量块中直接编写条件逻辑的思路完全可行,用三元表达式实现的写法本身符合Java语法规范,只是你给出的示例代码里循环终止条件写错了。
原代码里的终止条件left < height存在类型不匹配问题:height是int数组,left是数组下标,双指针场景下正确的终止条件应该是left < right,也就是左右指针相遇时结束循环。修正后可以直接运行的代码如下:
for (int left = 0, right = height.length - 1; left < right; height[left] < height[right] ? left++ : right--) { // 此处编写循环内的业务逻辑 }
补充说明
- Java语法没有强制要求for循环的第三个更新块必须写单一的自增/自减操作,只要是合法的语句表达式都能正常执行。
- 上面这段代码里三元表达式的执行逻辑完全符合你的预期:每次循环迭代跑完后,判断
height[left]和height[right]的大小,条件成立就自增left,不成立就自减right,和你把条件判断挪到循环体内的写法,运行效果、执行效率没有任何区别。 - 这种写法是接雨水、盛最多水的容器等双指针算法题的常见简写形式,如果团队编码规范要求循环更新逻辑必须直白易懂,再把判断逻辑移到循环体里就行。
内容的提问来源于stack exchange,提问作者Khatevate
相关产品推荐
相关产品推荐

