为何for循环与while循环查找列表最小值的运行结果不一致
for循环查找列表最小值结果错误的原因
核心问题是for循环的终止条件书写错误,导致循环没有遍历完列表所有元素就提前退出,自然无法得到全局最小值。
正常运行的while循环逻辑
while版本的终止条件为index < myList.size(),判断逻辑是「当前索引值小于列表总长度就继续执行」,可以覆盖从索引0到列表末尾的所有元素,不会遗漏比较项,因此能在测试用例[5,4,3,1,1,7]中正确找到最小值1。
异常for循环的执行流程
你写的for循环终止条件错写为index < myList.get(index),判断逻辑变成了「当前索引值小于当前索引位置的元素值才继续执行」,我们逐轮拆解测试用例的执行过程:
- 初始状态:
smallest = 5,index初始值为0 - 第1轮:判断
0 < myList.get(0)=5,条件成立进入循环。比较5和当前smallest=5无更新,index自增为1 - 第2轮:判断
1 < myList.get(1)=4,条件成立进入循环。比较4<5,smallest更新为4,index自增为2 - 第3轮:判断
2 < myList.get(2)=3,条件成立进入循环。比较3<4,smallest更新为3,index自增为3 - 第4轮:判断
3 < myList.get(3)=1,条件不成立,循环直接终止
此时循环仅遍历了列表前3个元素,根本没有访问到索引3、4位置的1和索引5位置的7,最终得到的3只是前3个元素的最小值,不是整个列表的最小值。
修正后的for循环写法
只需要把终止条件改回判断索引和列表长度的关系即可,代码如下:
int smallest = myList.get(0); for (int index = 0; index < myList.size(); index++) { if (myList.get(index) < smallest) { smallest = myList.get(index); } }
内容的提问来源于stack exchange,提问作者SkyCowie
相关产品推荐
相关产品推荐

