Loops Java中的一个小代码导致了混乱的结果 公共类程序{ 公共静态void main(字符串[]args){ int x=1; 对于(;x
我学java已经几个月了。令我惊讶的是,我在sololearn中发现了这样一个固定的问题,我已经证明了答案是26。Loops Java中的一个小代码导致了混乱的结果 公共类程序{ 公共静态void main(字符串[]args){ int x=1; 对于(;x,loops,java,Loops,Java,我学java已经几个月了。令我惊讶的是,我在sololearn中发现了这样一个固定的问题,我已经证明了答案是26。 我理解普通for循环的工作原理,但我不理解这种格式。因为x既是循环的计数器,在每次迭代中都会递增,而且在同一个循环中也会被修改,这对初学者来说可能有点混乱 从值1开始,您进入循环,因为1
我理解普通for循环的工作原理,但我不理解这种格式。因为
x
既是循环的计数器,在每次迭代中都会递增,而且在同一个循环中也会被修改,这对初学者来说可能有点混乱
从值1
开始,您进入循环,因为1<6
,您
将1*1=1
平方,然后循环的下一次迭代,在这里可以得到
x++
,因此1+1=2
,再次呈方形,2*2=4
,再次x++
,
4+1=5
,再次平方5*5=25
然后,我所理解的令人困惑的部分开始发挥作用,你很困惑为什么我们得到了最终的x++
。当x
变成25
时的迭代是当我们进入x=5
,也就是<6
,然后在循环中的语句被执行之后,你为下一次迭代做递增/递减,即25+1=26
,只有在那之后,我们离开循环并得到你神秘的结果
检查下图,然后使用钢笔纸和调试器跟随代码。
Java中的
for
循环有三个部分,初始化、条件和事后思考,这三个部分都是可选的,这意味着您可以为(;x>10;)和for(int x=0;;+x)
例如:
public class Program {
public static void main(String[] args) {
int x = 1;
for(; x < 6; x++) {
x = x * x;
}
System.out.printf("%d", x);
}
}
将永远打印“test”,因为(;)的for等于,而(true)
的for循环的部分未被使用
在此特定代码中,变量x
在for
之外使用,因为一旦循环完成,将打印变量,如果在初始化部分声明变量,当循环结束时,变量将超出范围,从而导致不需要的结果
tl;dr:循环是正常的,具有正常的“格式”,只是没有使用的初始化部分
这是一个熟悉调试器的好机会。正如burnabyRails所指出的那样,“惊喜”源于修改循环变量,这是您应该(通常)避免做的事情。(或者,阅读Java中如何指定for
循环,并逐步完成代码。)你在问什么?我的回答有用吗?请让我知道,如果不是的话,我可以帮助更多
for(;;){
System.out.println("test");
}