我不明白为什么在这个代码中计算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 - 。
答案 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
的前几个值会发生什么,那就很明显了:
result = 1; // e = 0, result = 1
result = 1; // e = 1
result *= 2; // e = 0, result = 2
result = 1; // e = 2
result *= 2; // e = 1, result = 2
result *= 2; // e = 0, result = 4
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的下一次迭代循环。