以下代码的输出与第二个代码的输出不同 有人可以解释这个问题吗?
代码1:
for(int i = 1; i <= intInput; i++)
{
for(int j = 1; j<=i; j++)
{
Console.Write('+');
Console.WriteLine();
}
}
if intInput is 4 Ouput is:
+
+
+
+
代码2:
for(int i = 1; i <= intInput; i++)
{
for(int j = 1; j<=i; j++)
Console.Write('+');
Console.WriteLine();
}
if intInput is 4 Ouput is:
+
++
+++
++++
我知道这行代码是如何工作的,但我不明白括号在两个代码上有什么区别?
答案 0 :(得分:4)
写作时;
for(int j = 1; j <= i; j++)
{
Console.Write('+');
Console.WriteLine();
}
两个Console
行都会有效,直到j
循环播出。
但是当你写作
for(int j = 1; j <= i; j++)
Console.Write('+');
Console.WriteLine();
只有第一个Console
才能运行,直到j
循环播出。这就是为什么第二个等于;
for(int j = 1; j<=i; j++)
{
Console.Write('+');
}
Console.WriteLine();
如果循环中包含一个语句,则可以省略卷曲括号。但使用它们总是是一种更好的方法。
阅读:Why is it considered a bad practice to omit curly braces?
答案 1 :(得分:3)
第二种情况实际上意味着:
for(int i = 1; i <= intInput; i++)
{
for(int j = 1; j<=i; j++)
{
Console.Write('+');
}
Console.WriteLine();
}
缩进对编译器没有任何意义,只适合你
答案 2 :(得分:2)
循环有一个范围。如果不包括大括号,则只有第一行在循环中。如果你有大括号,那么内部的一切都属于循环的范围。
在这种情况下,第一个示例在控制台上写一个“+”,并在内循环的每次迭代中写一个新行。
第二种情况,内部循环仅在每次内部迭代时执行“+”写入。外循环添加新行。
答案 3 :(得分:0)
如果在第二个循环中用 i 更改1,则其将保持不变
for (int j = **i**; j <= i; j++)
Console.Write('+');
Console.WriteLine();