嵌套for循环初始化不起作用?

问题描述:

当我在下面运行for循环时,将显示的第一行必须是“2a 2b 2ab”的右边?因为a被初始化为“2”,但为什么是“a”以“4a”开始? (2)* b(2)= 4,那么b ++,b(3)* b(3)* b(2)= 4,然后b“b”放在那里b * b,即使b增加,它总是显示4ab,我认为它必须是b )= 9,提前致谢嵌套for循环初始化不起作用?

for (int a = 2; a < 10; a++) 
    { 
     for (int b = 2; b * b <= a; b++) 
     { 
      Console.WriteLine("{0}a {1}b {2}ab", a, b, b * b); 
     } 
    } 

首先回忆一下for语句的语义。

for(initialization; condition; step) body 

具有以下含义

initialization 
while condition is true do 
     body 
     step 

每当condition被选中,只有当condition是真机继续执行循环的bodystep时间。

a = 2条件2 * 2 <= 2不成立,所以机器扔掉内循环并直接进入外循环的下一次迭代。对于a其中2 * 2 <= a的值,内循环体将至少执行一次。当条件满足时,检查a的第一个值是4很容易。

a=4内循环将被执行一次,因为下一个值b是3和3 * 3 > 4a在外部循环中取得的最大值是9。当内部循环执行两次时,这也是a的最小值。

所有的一切从您的代码

for (int a = 2; a < 10; a++) 
    { 
     for (int b = 2; b * b <= a; b++) 
     { 
      Console.WriteLine("{0}a {1}b {2}ab", a, b, b * b); 
     } 
    } 

你应该期望输出如下:

4a 2b 4ab 
5a 2b 4ab 
6a 2b 4ab 
7a 2b 4ab 
8a 2b 4ab 
9a 2b 4ab 
9a 3b 9ab 

如果用a * b替换第三列数相匹配的模板,你的WriteLine()电话将是

Console.WriteLine("{0}a {1}b {2}ab", a, b, a * b); 

并且输出将是

4a 2b 8ab 
5a 2b 10ab 
6a 2b 12ab 
7a 2b 14ab 
8a 2b 16ab 
9a 2b 18ab 
9a 3b 27ab