2017-07-17 50 views
1
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入门指南。我不清楚上面的代码。当我在第一次迭代中设置为零时,while语句会被跳过,因为e将被设置为零,while条件将不成立。因此,我将是1,结果将是1,这个答案将被打印出来。虽然“Java,初学者指南”中的语句示例

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

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

我明白我的所有后续迭代中的程序,因为e经过第三次迭代后不会再次置零。但是我很困惑,为什么在第二次迭代之后e的累积结果不会因为递减e而丢失。

感谢您的帮助。

+2

'因为e现在再次为零 - - 事实并非如此。在for循环的每次迭代中,e被赋予i的当前值。 – Eran

+1

你为什么认为那个赋值'e = i;'困扰什么'e'以前? – Tom

+0

我不知道为什么人们downvote你的问题。您提供了一个代码并详细描述了您的问题。你做得很好。 –

回答

1

while周期在for周期内。我们首先研究while循环。将相乘result 2和递减ee0更大,基本上,其结果将是

初始值* 2^I

目前,用于循环进入从010和在每次迭代初始化result1ei电源)。它会计算2^i除了第一个,每个迭代中i0,因此e>0将是false。并且迭代将结束printlnresult

当我设置为零的第一次迭代中,while语句是 跳过由于E将被设置为零,而病情不会 是真实的。

这是正确的。

在第二迭代中,我和e为1,因此,while语句 将被执行,因为E> 1,结果会因此2.所以 远,那么好。然而,e由1结果后递减是 计算所以现在e是回0

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

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

错误。 e0确实,但只有直到

e = i; 

所在行的i的值,该值2将被分配到e。所以e将在while循环的开始和while条件将true开始2两次,因此您将有while循环的两个迭代。

我了解我的所有后续的迭代程序,因为它会过去,这第三 迭代后Ë 将不会设置回零一次。但是我很困惑,为什么累积结果为什么在第二次迭代后将e递减为零的结果不会丢失 。

错误。在while循环的每次迭代结束时,e将为0,但在每个while循环之前将为i

1

在第二迭代中,我和e为1,因此,while语句 将被执行,因为E> 1,结果会因此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循环的第二次迭代后,e0正确的。但是在开头有这样一条美丽的线:e = i; 在第三次迭代中,i将是2,这意味着在e = i之后(以及在while之前),e将被设置为2。不是0