'对于'循环被跳过?

时间:2016-07-08 00:09:25

标签: c# for-loop

我对编程比较陌生,而我现在正试图掌握C#。我已经达到了一个我正在学习' for'循环。我坚持的问题是只使用'来创建下面的形状。循环和角色' *'只有一次。

    *
   ***
  *****
 *******
*********

我写的代码如下:

        for (int row = 0; row < 5; row++)
        {
            for (int column = 0; column + row < 4; column++)
            {
                Console.Write(" ");
            }

            for (int column = 0; column + row >= 4; column++)
            {
                if (column - row >= 5)
                    break;
                Console.Write("*");
            }
            Console.WriteLine();
        }

从我所看到的,第二个嵌套&#39; for&#39;正在跳过循环,直到第一个循环完成。

用&#34; O&#34;替换空格,显示以下内容:

OOOO
OOO
OO
O
*********
**********
***********
************
*************
**************

谁能看到我出错的地方?

5 个答案:

答案 0 :(得分:1)

问题在于第二个嵌套循环column + row >= 4的循环条件。由于列从零开始,因此第一次执行与row >= 4基本相同,因此对于任何行&lt; 5它不会打印,这正是第一个循环的条件。这意味着所有空间都被打印出来,然后是一堆星星。

您也不需要if语句,因为这基本上是第二个循环条件。像for (int column = 0; column <= row * 2; column++)这样的东西最有意义。

你也应该重新评估外循环,因为你只需要5行,你将按原样经过10行。

for (int row = 0; row < 5; row++)
    {
        for (int column = 0; column + row < 4; column++)
        {
            Console.Write(" ");
        }

        for (int column = 0; column <= row * 2; column++)
        {
            Console.Write("*");
        }
        Console.WriteLine();
    }

答案 1 :(得分:0)

for (int row = 0; row < 10; row++)
{
    // This code will only get run for the first 3 rows
    for (int column = 0; column + row < 4; column++)
    {
        Console.Write(" ");
    }

    // This code will only get run for rows 4 and greater
    for (int column = 0; column + row >= 4; column++)
    {
        if (column - row >= 5)
            break;
        Console.Write("*");
    }
    Console.WriteLine();
}

您需要做的是确保您输入正确数量的空格,然后输入每行的正确数量*。

提示:您可能只需要5行而不是10行

答案 2 :(得分:0)

这有效:

for (int row = 0; row < 5; row++)
{
    for (int column = 0; column < 5 + row + 1; column++)
        Console.Write(column < 5 - row ? " " : "*");
    Console.WriteLine();
}
     *
    ***
   *****
  *******
 *********

答案 3 :(得分:0)

制定了解决方案:

        for (int row = 0; row < 5; row++)
        {
            for (int column = 0; column + row < 4; column++)
            {
                Console.Write(" ");
            }

            for (int column = 0; column + row >= 0; column++)
            {
                if (column == (row * 2) + 1)
                    break;
                Console.Write("*");
            }
            Console.WriteLine();
        }

x ...的解决方案可能更合适,更清晰,不需要if语句和任何休息,但是你们都帮助我在没有太多牵手的情况下得到答案,我很欣赏

谢谢:D

答案 4 :(得分:-1)

一个简单的逻辑可以是这样的。

for(i=0 to 4) //since five rows
   for(j=0 to 2*i-1) // is in multiple of 1, 3, 5
      print(*)