Loops Java中的一个小代码导致了混乱的结果 公共类程序{ 公共静态void main(字符串[]args){ int x=1; 对于(;x

Loops Java中的一个小代码导致了混乱的结果 公共类程序{ 公共静态void main(字符串[]args){ int x=1; 对于(;x,loops,java,Loops,Java,我学java已经几个月了。令我惊讶的是,我在sololearn中发现了这样一个固定的问题,我已经证明了答案是26。 我理解普通for循环的工作原理,但我不理解这种格式。因为x既是循环的计数器,在每次迭代中都会递增,而且在同一个循环中也会被修改,这对初学者来说可能有点混乱 从值1开始,您进入循环,因为1

我学java已经几个月了。令我惊讶的是,我在sololearn中发现了这样一个固定的问题,我已经证明了答案是26。
我理解普通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");
}