首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取没有大括号的循环?

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

Stack Overflow用户
提问于 2012-11-08 06:40:17
回答 2查看 192关注 0票数 2

我正在尝试读取这段代码的输出,但它对我来说就是没有意义。

即使在了解到没有大括号的循环只遍历第一行之后,输出仍然没有任何意义。有些数字是这样的,但另一些数字就是不这样。

我的代码:

代码语言:javascript
复制
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 );

并且它输出:

代码语言:javascript
复制
8 1 10
4 2 10
4 4 10
2 2 11
1 2 13

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

但在那之后的任何事情,我都被难住了,我不知道计算机是如何计算剩下的。

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

先谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-08 06:41:24

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

所以

代码语言:javascript
复制
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );

等同于

代码语言:javascript
复制
for (i = 2; i <= n; i = i+2)
{
    System.out.println (n + " " + i + " " + j );
}

通常,在这些情况下使用缩进是为了使代码更容易理解,如下所示:

代码语言:javascript
复制
for (i = 2; i <= n; i = i+2)
    System.out.println (n + " " + i + " " + j );

EDIT:现在,这是问题的实际答案。这完全取决于循环执行的不同迭代以及变量是如何递增的。

代码语言:javascript
复制
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.

现在,继续迭代:

代码语言:javascript
复制
while (n > 1)
{
    n = n/2;
    for (i = 2; i <= n; i = i+2)
        System.out.println (n + " " + i + " " + j );

    j++;
}

对于第一次迭代,我们使用n=8 i=1 j=10,因此由于n > 0true,所以循环发生。

代码语言:javascript
复制
n = n / 2; //n = 4

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

代码语言:javascript
复制
for (i = 2; i <= 4; i = i+2) //Since n = 4

由于n = 4i唯一可以接受的值是24,那么打印结果是:

代码语言:javascript
复制
4 2 10
4 4 10

在此之后,j递增1,使其成为j = 11。由于n = 4while的条件再次得到满足。n = n/2使n取值2,因此它进入while again。让我们再看一遍for:

代码语言:javascript
复制
for (i = 2; i <= 2; i = i+2) //Since n = 2

这一次,i可以接受的惟一值是2 (请注意,在开始迭代时,i的值会再次重置为2 ),这就是您得到的打印结果。

代码语言:javascript
复制
2 2 11

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

在最后一次迭代中,n = n/2产生n = 1,因为n是一个int,但这是在while中完成的,所以它再次进入。现在n = 1循环看起来像这样:

代码语言:javascript
复制
for (i = 2; i <= 1; i = i+2) //Since n = 1

i设置为2,但不满足for的条件(2 <= 1false)。然后,这次没有打印,但是在结束时,j会递增到13

在下一次迭代中,你得到了n = 1,这意味着不满足while的条件,所以迭代中断。最后,你得到了n = 1i = 2j = 13。这是你得到的最后一个打印结果。

票数 9
EN

Stack Overflow用户

发布于 2012-11-08 06:51:51

在n= 8、i=1和j= 10的情况下开始while循环。

代码语言:javascript
复制
start while: (n=8 > 1) is true
n = 4
i = 2 (i <= 4, so do for loop, then change i to i+2=4)
print 4,2,10
i = 4 (i <= 4, so do for loop again, then i = i+2 = 6
print 4,4,10
i = 6 (i <= 4 is false, so exit for)
j++ so j becomes 11

next while:
n = n/2 = 2
i = 2 (i <= 2, so do for loop, then change i to i+2=4)
print 2,2,11
i = 4 (i <= 2 is false, so exit for)
j++ -> j = 12

next while:
n = n/2 = 1
i = 2 (i <= 1 is false, so exit loop)
j++ -> j = 13

exit while.
Final print= n = 1, i = 2 (value assigned in last for loop, loop doesn't get executed so i doesnt get incremented by 2), and j = 13

希望这能有所帮助:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13279511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档