【问题标题】:'For' Loop being skipped?'For' 循环被跳过?
【发布时间】:2016-07-08 00:09:25
【问题描述】:

我对编程比较陌生,目前正在尝试掌握 C#。我已经到了学习“for”循环的地步。我坚持的问题是只使用“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();
        }

据我所知,第二个嵌套的“for”循环被跳过,直到第一个循环完成。

将空格替换为“O”,显示如下:

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

谁能看出我哪里出错了?

【问题讨论】:

  • 第二个 for 循环中的逻辑不合理;您只是写了它不会做任何事情,例如column + row &gt;= 4 所以对于第二个 for 循环中的前 4 行;它不会执行。
  • 我建议你学习如何使用调试器.. 也可以在for loops做一些复习阅读
  • 把你的答案作为一个实际的网站答案,而不是把它放在你的问题中。
  • 本站新手,抱歉。说我可以在 2 天内接受我自己的答案,所以我会等它。希望表扬那些帮助过的人。

标签: c# for-loop


【解决方案1】:

问题在于第二个嵌套循环column + row &gt;= 4 的循环条件。由于列从零开始,第一次执行与row &gt;= 4 基本相同,因此对于任何

您也不需要 if 语句,因为这基本上是第二个循环条件。像for (int column = 0; column &lt;= 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();
    }

【讨论】:

  • 谢谢,我完全错过了第二个循环从未满足条件的事实。终于有办法了。
【解决方案2】:
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 行

【讨论】:

    【解决方案3】:

    这行得通:

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

    【讨论】:

      【解决方案4】:

      制定了解决方案:

              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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多