如何读取没有括号的循环?

Hea*_*d07 2 java for-loop while-loop

我正在尝试阅读此代码的输出,但它只是对我没有意义.

即使在得知没有括号的循环仅在第一行循环之后,输出仍然毫无意义.有些数字可以,但有些则没有.

我的代码:

int n = 8;
int i = 1;
int j = 1;

j = n + 2;

System.out.println (n + " " + i + " " + j );

while (n > 1)
{
    n = n/2;
    for (i = 2; i <= n; i = i+2)
        System.out.println (n + " " + i + " " + j );

    j++;
}
System.out.println (n + " " + i + " " + j );
Run Code Online (Sandbox Code Playgroud)

它输出:

8 1 10
4 2 10
4 4 10
2 2 11
1 2 13
Run Code Online (Sandbox Code Playgroud)

我得到8-1-10和4-2-10

但是之后的任何事情,我都难过,我不知道计算机如何计算其余部分.

有人会介意一步一步地和我一起完成剩下的输出吗?

提前致谢.

Fri*_*itz 9

没有大括号意味着循环只影响循环后面的下一个语句.

所以

for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
Run Code Online (Sandbox Code Playgroud)

相当于

for (i = 2; i <= n; i = i+2)
{
    System.out.println (n + " " + i + " " + j );
}
Run Code Online (Sandbox Code Playgroud)

通常,在这些情况下使用缩进来使代码更易于理解,如下所示:

for (i = 2; i <= n; i = i+2)
    System.out.println (n + " " + i + " " + j );
Run Code Online (Sandbox Code Playgroud)

编辑:现在,这是问题的实际答案.这一切都取决于循环的不同迭代以及变量如何递增.

int n = 8;
int i = 1;
int j = 1;

j = n + 2; //This means that j takes the value 10.

System.out.println (n + " " + i + " " + j ); // 8 1 10 So far, so good.
Run Code Online (Sandbox Code Playgroud)

现在,继续迭代:

while (n > 1)
{
    n = n/2;
    for (i = 2; i <= n; i = i+2)
        System.out.println (n + " " + i + " " + j );

    j++;
}
Run Code Online (Sandbox Code Playgroud)

对于第一次迭代,我们有n=8 i=1 j=10,所以因为n > 0true循环发生.

n = n / 2; //n = 4
Run Code Online (Sandbox Code Playgroud)

然后,for(请注意,它只是将值2i):

for (i = 2; i <= 4; i = i+2) //Since n = 4
Run Code Online (Sandbox Code Playgroud)

因为n = 4,该值只i可以是24,然后打印件:

4 2 10
4 4 10
Run Code Online (Sandbox Code Playgroud)

之后,j增加1,制作它j = 11.while因为这个条件再次得到满足n = 4.n = n/2使n取的值2,所以它进入while again.让我们来看看再次:

for (i = 2; i <= 2; i = i+2) //Since n = 2
Run Code Online (Sandbox Code Playgroud)

这一次,唯一i可以采取2的值是(注意,在开始迭代时,值i会再次重置2),这就是你得到的打印件.

2 2 11
Run Code Online (Sandbox Code Playgroud)

再次迭代之前,j++使j具有价值12.

在最后的迭代中,n = n/2结果n = 1因为n是a int但是这是在while内部完成的,所以它再次进入.现在n = 1循环看起来像这样:

for (i = 2; i <= 1; i = i+2) //Since n = 1
Run Code Online (Sandbox Code Playgroud)

i设置为2并且不满足for的条件(2 <= 1false).那么有没有打印这个时候,又j增加为13在同时结束.

在下一次迭代中n = 1,这意味着while不满足条件,因此迭代会中断.最后你有n = 1,i = 2j = 13.这是你得到的最后一个印刷品.

  • "以下**声明**代码".你可以在一行中有很多陈述. (3认同)