Java while循环嵌套在for循环中。

时间:2016-03-03 17:21:44

标签: java loops for-loop while-loop

我有这个简单的代码示例,我不明白。

// 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

问题:

  1. 为什么result并不总是2,因为每次输入for循环时它都会被重新初始化?

  2. e--减少也不做任何事情,是吗?因为,再次,e在每次迭代时都被设置为等于i

  3. 感谢。

3 个答案:

答案 0 :(得分:2)

  

为什么结果并不总是2,因为它每次都被重新初始化   输入for循环的时间?

是的,它正在重新初始化,但只在第一个循环中。你的内部循环是循环while(e > 0)并在每次迭代时加倍。然后,一旦完成循环,您将打开结果并重新启动。 result的值取决于eresult定义了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)

resulte会在for循环的顶部重新初始化,但会在显示while之前的result循环中进行修改for循环的底部。