Java for循环内部有一个while循环

时间:2016-04-02 15:21:35

标签: java

我不明白为什么在这个代码中计算2的幂,e在while循环中递减:

public class Power {
    public static void main (String [] args) {
        int e;
        int result;

        for (int i=0; i< 10; i++) {
            result = 1;
            e = i;
            while (e > 0) {
                result *= 2;
                e--;
            }
            System.out.println("2 to the " + i + " power is " + result);   
        }
    }
}

如果我在没有e的情况下运行 - 代码只执行第一个代码。它只适用于e - 。

5 个答案:

答案 0 :(得分:3)

要了解发生了什么,请考虑内部循环与其外部循环隔离:

e = someNUmber;
while (e > 0) {
    result *= 2;
    e--;
}

e达到零时,循环停止。这就是为什么需要在循环体内进行一些操作来更改e的值以使其接近零的原因。

你的循环等同于这个for循环:

for (int e = someNumber ; e > 0 ; e--) {
    result *= 2;
}

e的值是你的循环计数器。它控制内循环的迭代次数,确保它完全执行i次。

答案 1 :(得分:1)

这是因为要计算2的幂 i ,那么你必须乘以2, i 次。因此,每次 i (所需的2的幂)被分配给e并递减,以便乘以 i 次。

答案 2 :(得分:1)

如果你看一下i的前几个值会发生什么,那就很明显了:

i = 0

result = 1; // e = 0, result = 1

i = 1

result = 1;  // e = 1
result *= 2; // e = 0, result = 2

i = 2

result = 1;  // e = 2
result *= 2; // e = 1, result = 2
result *= 2; // e = 0, result = 4

i = 3

result = 1;  // e = 3
result *= 2; // e = 2, result = 2
result *= 2; // e = 1, result = 4
result *= 2; // e = 0, result = 8

内循环确保结果乘以2 i次。

内部循环和额外e变量的(可以说是更清晰的)替代方法是:

for (int j = 0; j < i; j++) {
    result *= 2;
}

答案 3 :(得分:0)

  

如果我在没有e的情况下运行 - 代码只执行第一个。

实际上在这种情况下你的程序陷入无限循环

while (e > 0) {
    result *= 2;
}

您只看到一个结果,因为for循环的第一次迭代e等于0所以程序不会进入while循环

答案 4 :(得分:0)

存在

e--以防止无限循环,删除它将导致while循环的第二次迭代中的无限for循环,因为{{1永远不会改变,因此它永远不会变为零,你永远不会跳出循环来达到e语句或甚至进入{{1的下一次迭代循环。