for循环跳过一条线

时间:2016-12-24 03:38:15

标签: c# for-loop

我是c#和编程的新手。在下个月开始上学之前,我正尝试在网上做一些练习,以熟悉语言的基础知识。   我写了一个超级简单的程序,我无法理解它为什么做它正在做的事情,而且我无法在任何地方找到答案。这是代码。

        int i, j, rows;

        Console.Write("\n\n");
        Console.Write("Display the pattern like right angle triangle which repeat a number in a row:\n");
        Console.Write("-------------------------------------------------------------------------------");
        Console.Write("\n\n");

        Console.Write("Input number of rows : ");
        rows = Convert.ToInt32(Console.ReadLine());
        for (i = 1; i <= rows; i++)
        {
            for (j = 1; j <= i; j++)
                Console.Write("{0}", i);
                Console.Write("\n");

        }

所有这个程序都假设是一个具有相同数字的简单金字塔。

我的问题是,在第二个for循环中,它会写i但是它会重新评估j++j<=,而不是写\n直到最后一个结尾循环运行。我不明白为什么?该计划有效,但我不明白为什么。除非你打破它,否则for循环总是假设执行其中的所有内容?

感谢并抱歉这个非常新手的问题,但它让我疯了!

3 个答案:

答案 0 :(得分:4)

在编程中,每个语句都有一个运行的范围块。 默认情况下,for循环只有一个语句范围。如果我们想在for循环范围中运行多个语句,那么我们使用花括号{}来定义代码块。

在你的情况下,你需要使用像这样的花括号来运行这两个语句。

for (j = 1; j <= i; j++)
{
   Console.Write("{0}", i);
   Console.Write("\n");
}

在所有条件和循环结构中使用大括号{}的最佳编程实践。它易于阅读和理解代码。

答案 1 :(得分:3)

for循环将执行其范围内的所有内容。不使用{},for循环的范围就是它之后的下一行。要执行多个命令,您需要将它们放在大括号中,如下所示:

for (j = 1; j <= i; j++)
{
    Console.Write("{0}", i);
    Console.Write("\n");
}

通常最佳做法是始终拥有{}以提高可读性,并在需要时轻松更新循环。虽然你可以像这样编写for循环,但它可以完全读取。

for (i = 1; i <= rows; i++)
for (j = 1; j <= i; j++)
{
    Console.Write("{0}", i);
    Console.Write("\n");
}

上面的代码将执行相同的操作,将第二个for循环保留在第一个。

的范围内

顺便说一句,我注意到你在for循环之外声明了你的变量,对于编程来说是新手,你可能不知道for循环的某些特性。

你可以在for循环中声明你的迭代器:

for (int i = 1; i <= rows; ++i)

在大多数情况下,最好在for循环中声明你的迭代器,因为它给'i'提供了与for循环相同的范围。

for循环的另一个优点是,分号之间的所有选项实际上都是可选的。因此,例如,如果在for循环之外声明了迭代器,则可以在for循环中省略它:

int i = 1;
for (; i<= rows; ++i)

您甚至可以省略其中的任何部分或全部:

for (;;) // a perfectly valid for loop that will loop forever.

您甚至可以拥有多个迭代器:

for (int i = 0, j = 0; i < 5; ++i, ++j)

答案 2 :(得分:2)

您希望在内部for循环的每次迭代中,两个Console.Write语句都将被执行是错误的:

for (j = 1; j <= i; j++)
    Console.Write("{0}", i); //inner for loop scope starts and ends on this statement

内部for循环后没有花括号。因此,默认情况下,仅在for语句之后遇到的第一个语句将在内部for循环的范围内处理。

for循环有一个大括号,如下所示:

for (i = 1; i <= rows; i++)
{//outer for loop scope starts here
    for (j = 1; j <= i; j++)
        Console.Write("{0}", i);
    Console.Write("\n");
}//outer for loop scope ends here

因此,在外部for循环的每次迭代中,整个内部for循环和Console.Write("\n");都将执行。

作为一般惯例,如果您只有一个语句要在for循环中执行,那么您也可以使用标签缩进它,如代码段中所示。