gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:42:09 29 4
gpt4 key购买 nike

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

即使在了解到不带大括号的循环仅循环第一行之后,输出仍然毫无意义。有些数字会,但其他数字不会。

我的代码:

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 );

它输出:

8 1 10
4 2 10
4 4 10
2 2 11
1 2 13

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

但在那之后,我很困惑,我不明白计算机是如何计算其余部分的。

有人会介意和我一起逐步检查剩余的输出吗?

提前致谢。

最佳答案

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

所以

for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );

相当于

for (i = 2; i <= n; i = i+2)
{
System.out.println (n + " " + i + " " + j );
}

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

for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );

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

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.

现在,继续迭代:

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循环发生。

n = n / 2; //n = 4

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

for (i = 2; i <= 4; i = i+2) //Since n = 4

n = 4 ,唯一的值 i可以带的是24 , 那么打印出来的是:

4 2 10
4 4 10

在那之后,j加一,成为j = 11 . while 的条件再次相遇是因为n = 4 . n = n/2使 n取值 2 , 所以它进入 while again .让我们再看看 for:

for (i = 2; i <= 2; i = i+2) //Since n = 2

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

2 2 11

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

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

for (i = 2; i <= 1; i = i+2) //Since n = 1

i设置为 2并且不满足 for 的条件( 2 <= 1false )。那么这次没有打印,还j增加到 13在这段时间结束时。

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

关于java - 如何读取没有大括号的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279511/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com