所以我在我的书中得到了这个程序并进行了测试,它运行良好。我需要帮助,但要了解它是如何起作用的。我知道两种方法的力量,例如2x2x2x2x2x2x2x2x2 = 512.嗯,这是程序:
// Compute integer powers of 2.
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);
}
}
}
所以我已经知道结果* = 2表示:结果=结果* 2.我不明白这是如何工作的。例如,我现在是4.结果= 1,e = i,所以e现在是4. 4高于0,所以while循环运行。然后它说结果是结果* 2,但那是1 = 1 * 2 = 2.但结果应该是16.结果如何变为16?因为它一直是1。我不明白。另外,为什么e--部分?我已经用e ++尝试了这个程序,但是然后它将结果打印为1,之后只打印了0.还尝试了没有e--或e ++,但随后它在dos-prompt中冻结。请注意我是初学者,这是我的第一个while循环。任何帮助,我将不胜感激。
答案 0 :(得分:2)
while(e > 0) {
result * = 2;
e--;
}
此循环执行,直到e变为零。 所以在第一个循环中
result = 1 * 2;
在第二个循环中
result = result * 2;
表示result = 2 * 2
同样。
答案 1 :(得分:0)
您正在使用嵌套循环。也就是说,while
循环内的for
循环。这意味着对于for
循环的每次迭代,while
循环将执行,直到它的条件变为false。
现在回答您的问题,对于for
的第一次迭代,i = 0.这意味着e = 0,这意味着while
循环不会执行。所以,这里的结果是1,这是合乎逻辑的,因为任何n ^ 0 = 1。
对于for
的第二次迭代,i = 1.这意味着e = 1.这里,while
循环将运行1次迭代。它将使结果= 2(结果* = 2)。因此,结果是2因为2 ^ 1 = 2。
以下是干燥表。
for i while e result
loop loop
1 0 1 0 1
2 1 1 1 2
3 2 1 2 2
1 2 1 4
4 3 1 3 2
2 2 2 4
1 3 1 8
等等。这张桌子看起来很难看,但它会给你一个提示。
结果如何变为16?因为它一直是1。
结果仅初始化为1,但每次while
循环执行时它的值都会相乘。
我用e ++尝试过这个程序,然后将结果打印为1和 在此之后只有0。
如果您放置e++
而不是e--
,则此循环将一直运行直到e溢出。但是当e的值达到33时,由于乘法,结果将变为0。之后,它将保持为0。
在没有e - 或e ++的情况下也试过它,但随后它就冻结了 DOS提示符。
这意味着你的while循环条件永远不会变为false,因此,它将是一个无限循环。