嵌套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
是真机继续执行循环的body
和step
时间。
当a = 2
条件2 * 2 <= 2
不成立,所以机器扔掉内循环并直接进入外循环的下一次迭代。对于a
其中2 * 2 <= a
的值,内循环体将至少执行一次。当条件满足时,检查a
的第一个值是4
很容易。
当a=4
内循环将被执行一次,因为下一个值b
是3和3 * 3 > 4
。 a
在外部循环中取得的最大值是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