JAVA“while”为什么这段代码的结果= 4949?

时间:2011-09-18 01:35:36

标签: java

我认为此代码的结果= 4950。 那是因为99 + 98 + ... 1 = 4950。 你能告诉我怎么做。

public static void main(String[] args) {
    int n = 100;
    int total = 0;
    while(n >= 0){
        total += --n;
    }
    System.out.println(total);
}

5 个答案:

答案 0 :(得分:13)

你是对的,99 + 98 + ... + 1 = 4950。但你必须遵循逻辑。

考虑n = 0时.while循环的条件求值为true,并且在添加到total之前应用递减运算符。如果递减一个值为0的变量,则得到-1,当你将-1加到4950时,得到4949。

所以我们真正看到的是:99 + 98 + ... + 1 + 0 +( - 1)。这相当于4949。

答案 1 :(得分:2)

尝试更改代码:

System.out.println("before " + n + ", " + total);
total += --n;
System.out.println("after " + n + ", " + total);

答案 2 :(得分:1)

a+=b means a=a+b;

a =--n means a = n-1 and n = n-1;   a=n-- means a=n;n=n-1;

所以,在循环中: 第一次:

total = total+99;//total = 0+99; n =99;

第二次:

total = total+98;//total=99+98;n=98

...

最后,你知道......

答案 3 :(得分:1)

在将其添加到total之前递减n的值,最后一次迭代将-1加到总数中。

将代码更改为后递减以获得正确的结果,添加1..100;如果要添加1..99。

,则需要将起点更改为99

答案 4 :(得分:1)

由于你输入了-n,因此在将n值添加到总数之前,n值会减少。由于当n等于0时允许程序进入while循环,最后的添加是,

总计+ = -1

这意味着,4950-1,所以答案是4949。

如果您想获得4950,请按如下方式更改while循环中的条件。

while(n> 0)

然后while循环不允许程序进入while循环,如果n的值等于0.因此没有-1情况。你会得到4950。