[英]Java for loop is hard to understand
有人可以向我解释为什么以下代码块会产生如此不同的输出吗?
public class hello
{
public static void main(String args[])
{
int a,b,c;
for (a = 0; a < 5; a++)
{
for (b = 4; b >= a; b--)
{
System.out.print(" ");
}
for (c = 0; c <= a - b; c++)
{
System.out.print("*");
}
System.out.println();
}
}
}
输出:
public class hello
{
public static void main(String args[])
{
int a,b,c;
for (a = 0; a < 5; a++)
{
for (b = 4; b >= 0; b--)
{
System.out.print(" ");
}
for (c = 0; c <= a - b; c++)
{
System.out.print("*");
}
System.out.println();
}
}
}
输出:
由于b> = a等于b> = 0,因为每个循环b的值都会减去1,所以输出是否应该相同?
变量a
从0到4,因此对于每次迭代,您将具有:
for (b = 4; b >= 0; b--)
{ [...]
for (b = 4; b >= 1; b--)
{ [...]
for (b = 4; b >= 2; b--)
{ [...]
不,输出不能相同,因为每次执行时
for (a = 0; a < 5; a++)
这也被执行(5次)
for (b = 4; b >= a; b--)
{
System.out.print(" ");
}
但是的值a
与每次迭代改变: a
将初始为0,则1,2,3和4最后。
因此,您在第一种情况下要打印的空格数将随着a
每次迭代而减少。
对于a = 0我们有:b = 4,b = 3,b = 2,b = 1,b = 0(
for loop
停止,因为b = -1不是> = a = 0)对于a = 1,我们有:b = 4,b = 3,b = 2,b = 1(
for loop
停止,因为b = 0不是> = a = 1)对于a = 2,我们有:b = 4,b = 3,b = 2(
for loop
停止,因为b = 1不是> = a = 2)对于a = 3,我们有:b = 4,b = 3(
for loop
停止,因为b = 2不是> = a = 3)对于a = 4,我们有:b = 4(
for loop
停止,因为b = 3不是> = a = 4)
请阅读代码中的注释,您将有所不同!
int a, b, c;
for (a = 0; a < 5; a++)
{
for (b = 4; b >= a; b--) // Print every time b-a + 1 underscores... since you start every time with b=4 you have for each a one space fewer
{
System.out.print(" ");
}
for (c = 0; c <= a - b; c++) // and then print (a-b)-c +1 stars (b is every time a-1)...
// (first a=0 -b=-1)+1=2 and any time it will prit 2 stars scince
{
System.out.print("*");
}
System.out.println();
}
for (a = 0; a < 5; a++)
{
for (b = 4; b >= 0; b--) // Print every time b-a + 1=4 underscores
{
System.out.print(" ");
}
for (c = 0; c <= a - b; c++) // and then print (a-b)-c +1 stars (b is every time -1)...
// first time ( a=0 -b=-1)+1 =2 , second time (a=1 - b=-1)+1=3
{
System.out.print("*");
}
System.out.println();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.