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减少到零而丢失。
感谢您的帮助。
答案 0 :(得分:1)
while
周期在for
周期内。让我们先研究while
周期。当result
大于e
时,它会将e
乘以2并递减0
,基本上,结果将是
初始值* 2 ^ i
现在,for循环从0
变为10
,并在每次迭代中使用result
初始化1
,使用e
初始化i
( 电源)。它将在每次迭代中计算 2 ^ i ,除了第一次,其中i
为0
,因此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
。因此e
在2
循环开始时为while
,while
条件为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
。