为何标准for循环中的条件布尔值未按预期工作?
为什么for循环条件直接用
i>1&&i<4时无法执行? 嘿,这个问题的核心其实是你没搞清楚Java中for循环的执行逻辑!咱们一步步拆解来看:
首先得明确for循环的执行流程:
- 先执行初始化语句(也就是
int i=0这一步) - 立刻判断条件表达式的真假,如果是false,直接跳过整个循环,连循环体都不会进
- 如果条件是true,执行循环体里的代码
- 执行完循环体,再执行递增/递减语句(
i++) - 回到第二步,重新判断条件,直到条件为false才终止循环
现在看你的第一段代码:
int[]weather = {1,2,3,4,5,6,7}; for(int i=0;i>1&&i<4; i++ ) { System.out.println("Weather is ===> "+weather[i]); }
初始化后i=0,然后判断i>1&&i<4——0>1是false,整个逻辑表达式结果就是false,所以循环直接终止了,根本没机会进入循环体执行打印代码,自然就没输出啦。
而第二段代码的逻辑是:
int[]weather = {1,2,3,4,5,6,7}; for(int i=0;i<10; i++ ) { if(i>1&&i<4) { System.out.println("Weather is ===> "+weather[i]); } }
这里for循环的条件是i<10,初始化i=0时条件为true,所以能进入循环体。之后每次循环都会先判断i是否在2到3的范围内(也就是i>1&&i<4),符合条件才打印,所以能正常输出目标元素。
其实如果只想遍历索引2和3,更高效的写法是直接把for循环的初始化和条件改成:
int[]weather = {1,2,3,4,5,6,7}; for(int i=2; i<4; i++ ) { System.out.println("Weather is ===> "+weather[i]); }
这样一开始就把i设为2,循环到i=4时终止,直接遍历目标索引,不用额外的if判断~
内容的提问来源于stack exchange,提问作者JohnnyO
相关产品推荐
相关产品推荐

