Java 为什么此语句打印此输出?

Java 为什么此语句打印此输出?,java,Java,为什么这个打印语句打印3而不是1004作为输出 int n = 2005; for (int i = 0; i < 50; i++) n = (n + 3) / 2; System.out.print(n); int n=2005; 对于(int i=0;i

为什么这个打印语句打印3而不是1004作为输出

int n = 2005;
for (int i = 0; i < 50; i++)
   n = (n + 3) / 2;

System.out.print(n);
int n=2005;
对于(int i=0;i<50;i++)
n=(n+3)/2;
系统输出打印(n);
如果我这样做:

int n = 2005;
for (int i = 0; i < 50; i++)
System.out.println(n); 
n = (n + 3) / 2;
System.out.print(n);
int n=2005;
对于(int i=0;i<50;i++)
系统输出println(n);
n=(n+3)/2;
系统输出打印(n);
它为每个迭代打印2005,最后一次打印1004

如果有括号(如下所示)

int n=2005;
对于(int i=0;i<50;i++){
系统输出println(n);
n=(n+3)/2;
}
系统输出打印(n);
}
然后它的行为就像2005年一样 1004 503 253 128 65 34 18 10 6. 4. 3.
3…3

for
循环中打印
n
,然后您将了解这是如何工作的

int n = 2005;
for (int i = 0; i < 50; i++){
    System.out.println(n);
    n = (n + 3) / 2;
}
int n=2005;
对于(int i=0;i<50;i++){
系统输出println(n);
n=(n+3)/2;
}

没有详细说明:你每次都或多或少地把
n
切成两半。最终
n
将接近3。然后它的
(3+3)/2==3
。事实上,如果迭代时间足够长,大多数初始数字都会到达那里。

您将执行
n=(n+3/2)
语句50次。经过一次迭代,它是1004,然后是503,然后是253,然后是128等等。你认为
for
循环在做什么?你试过调试吗?你可能还想在循环中使用{}。请阅读+1,了解一个改进了很多的问题,发布编辑。谢谢。这个问题并不像最初看起来的那么简单,但我第一次没有很清楚地解释这个问题。我将编辑这篇文章,以便更好地解释。@user3568042循环没有括号,这不会改变任何事情,如果您有(条件)指令1的
,则每次都会执行该语句;指示2指令1每次都将执行,而指令2将在循环结束后执行。这就是我想要的解释。我想知道为什么这两条语句不是每次都执行。
int n = 2005;
for (int i = 0; i < 50; i++){
    System.out.println(n);
    n = (n + 3) / 2;
}