我有这个简单的代码示例,我不明白。
// Compute integer powers of 2.
class Power {
public static void main (String args[]) {
int e, 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 to the 0 power is 1
2 to the 1 power is 2
2 to the 2 power is 4
2 to the 3 power is 8
2 to the 4 power is 16
2 to the 5 power is 32
2 to the 6 power is 64
2 to the 7 power is 128
2 to the 8 power is 256
2 to the 9 power is 512
问题:
为什么result
并不总是2,因为每次输入for
循环时它都会被重新初始化?
e--
减少也不做任何事情,是吗?因为,再次,e
在每次迭代时都被设置为等于i
。
感谢。
答案 0 :(得分:2)
为什么结果并不总是2,因为它每次都被重新初始化 输入for循环的时间?
是的,它正在重新初始化,但只在第一个循环中。你的内部循环是循环while(e > 0)
并在每次迭代时加倍。然后,一旦完成循环,您将打开结果并重新启动。 result
的值取决于e
,result
定义了while e > 0
加倍的次数。
e--减量也没有做任何事情,是吗?再次,e 在每次迭代时都被设置为等于i。
同样,是的,它在每次迭代时都被设置回i,但这并不意味着它没用。在每次迭代中,e被设置回i的新值,然后使用它来创建内部循环public void mouseDragged(MouseEvent evt){
Point pt = evt.getPoint();
x = pt.x;
y = pt.y;
Graphics g = getGraphics();
g.setColor(color);
if(Shape == "Oval"){
g.drawOval(x, y, 10, 10);
}
if(Shape == "Rectangle"){
g.drawRect(x, y, 10, 10);
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
}
,在每次迭代中,您将e减1并将结果加倍。
答案 1 :(得分:1)
这两个问题在一起。
你看,e设置为i,每次迭代实际上都是增加的。 而e越高,内在的时间就会越多。
例如,在你的第3次迭代中
i = 2
e = 2
result = 1
首先是:
result = result*2 = 1*2 = 2
e = 1
e仍然是> 0所以在第二次之后:
result = result*2 = 2*2 = 4
e = 0
我们走了。
< - > e--做了两次,结果不是2。答案 2 :(得分:0)
result
和e
会在for
循环的顶部重新初始化,但会在显示while
之前的result
循环中进行修改for
循环的底部。