而在“Java,初学者指南”中的语句示例

时间:2017-07-17 07:00:55

标签: java

public class Main {

    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);
        }
    }
}

我正在阅读Herbert Schildt撰写的Java初学者指南。我不清楚上面的代码。当i在第一次迭代时设置为零时,将跳过while语句,因为e将设置为零,而while条件将不为true。因此,我将为1,结果将为1,这个答案将被打印出来。

在第二次迭代中,i和e将为1,因此将执行while语句,因为e&gt;因此,结果将是2.到目前为止,这么好。但是,在计算结果后,e减1,所以现在e回到0。

我被设置为2的第三次迭代是我迷路的地方。由于e现在再次为零,这次迭代会发生什么?程序是否会从while循环中退出并再次返回到开头,因为while条件不再是真的?如果是这样,结果不会被设置回1,在i = 2的while循环运行后,结果将再次等于2而不是4?

我理解i的所有后续迭代中的程序,因为e在经过第三次迭代后不再被设置回零。但是我很困惑为什么累积结果不会因为在第二次迭代后将e减少到零而丢失。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

while周期在for周期内。让我们先研究while周期。当result大于e时,它会将e乘以2并递减0,基本上,结果将是

初始值* 2 ^ i

现在,for循环从0变为10,并在每次迭代中使用result初始化1,使用e初始化i电源)。它将在每次迭代中计算 2 ^ i ,除了第一次,其中i0,因此e>0将为false。最后,迭代将println result

  

当i在第一次迭代时设置为零时,while语句为   跳过因为e将设置为零而while条件不会   是的。

那是对的。

  

在第二次迭代中,i和e将为1,因此为while语句   将被执行,因为e&gt;因此,结果将是2.所以   远,那么好。但是,结果之后,e减1   如此计算,现在e又回到了0。

这是正确的(如果你的意思是e > 0)。

  

我被设置为2的第三次迭代是我迷路的地方。   由于e现在再次为零,这次迭代会发生什么?不是   程序被踢出while循环并返回到开头   因为while条件不再是真的吗?如果是这样,不是   结果设置回1,结果等于2   在i = 2的while循环之后再次运行而不是4?

不正确的。 e确实是0,但仅限于

e = i;

其中i的值(2)将分配给e。因此e2循环开始时为whilewhile条件为true两次,因此您将有两次迭代{ {1}}循环。

  

我理解自i以后所有后续迭代中的程序   它超过第三个后不会再次回到零   迭代。但我很困惑为什么累积的结果不会丢失   因为在第二次之后将e减少到零   迭代。

不正确的。在while循环的每次迭代结束时,e将为0,但在每个while循环之前它将为i

答案 1 :(得分:1)

  

在第二次迭代中,i和e将为1,因此为while语句   将被执行,因为e&gt;因此,结果将是2.所以   远,那么好。但是,结果之后,e减1   如此计算,现在e又回到了0。

因为e > 0,但除此之外,这是完全正确的。

  

我被设置为2的第三次迭代是我迷路的地方。   由于e现在再次为零,这次迭代会发生什么?

    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);
    }

您认为在for循环的第二次迭代后,e将为0,这是正确的。但是开头就有这条美丽的线条:e = i; 在第三次迭代中,i将为2,这意味着在e = i之后(在while之前),e将设置为{{1} }}。不是2