c#有星星和空格的循环

时间:2015-01-05 14:24:21

标签: c# loops

我目前正在为我必须做的循环这个简单的分配而烦恼。

基本上我想要达到的目标是:

1)用户给出了星形金字塔的长度

2)用for循环制作一个金字塔。

需要看起来像这样: (如果它需要5层高;第一排是5个空格1星;第2排4个空格2星等等。

    *
   **
  *** 
 ****

(很难格式化但你得到了我的意图。)

我目前有这个

    public void Pyramid()
    {
        Console.WriteLine("Give the hight of the pyramid");
        _aantal = Convert.ToInt32(Console.ReadLine());

        for (int i = 1; i <= _aantal; i++) // loop for hight
        {
            for (int d = _aantal; d > 0; d--) // loop for spaces
            {
                Console.Write(_spatie);
            }

            for (int e = 0; e < i; e++) // loop for stars
            {
                Console.Write(_ster);
            }

            Console.WriteLine();
        }
    }

输出始终是插入的空格数量,并且未正确递减。 虽然如果我调试它,它会正确倒计时。

感谢您的回复。

5 个答案:

答案 0 :(得分:5)

您可以使用字符串类的构造函数为您创建重复,然后一次打印两个值,然后您不需要额外的for循环

static void Main(string[] args)
{
    int rowHeight = 5;
    for (int row = 1; row <= rowHeight; row++)
    {
        string spaces = new string(' ', rowHeight - row);
        string stars = new string('*', row);
        Console.WriteLine("{0}{1}", spaces, stars);
    }
    Console.ReadLine();
}

<强>更新

对于语义,我将使用2 for for循环显示它

static void Main(string[] args)
{
    int rowHeight = 5;
    for (int row = 1; row <= rowHeight; row++)
    {
        int totalSpaces = rowHeight - row;
        for (int j = 0; j < totalSpaces; j++)
        {
            Console.Write(" ");
        }
        for (int j = 0; j < row; j++)
        {
            Console.Write("*");
        }
        Console.WriteLine();
    }
    Console.ReadLine();
}

答案 1 :(得分:1)

好吧,你的问题是

for (int d = _aantal; d > 0; d--) // loop for spaces

你真的想要

for (int d = _aantal - i ; d > 0; d--) // loop for spaces

但它实际上只是反映了你现在拥有的东西,但仍然没有创造出你想要的金字塔形状。

我认为你在控制台应用程序中最接近的是每隔一行减去一个空格:

for (int d = _aantal-i; d > 0; d-=2) // loop for spaces

将提供输出:

  

给出金字塔的高度:   10

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

答案 2 :(得分:0)

知道了!

static void Main(string[] args)
    {
        Console.WriteLine("Give the hight of the pyramid");
        string _spatie = " ";
        string _ster = "*";
        int _aantal = Convert.ToInt32(Console.ReadLine());

        for (int i = 1; i <= _aantal; i++) // loop for height
        {

            for (int d = i; d < _aantal; d++) // loop for spaces
            {
                Console.Write(_spatie);
            }

            for (int e = 1; e <= i; e++) // loop for stars
            {
                Console.Write(_ster);
            }

            Console.WriteLine();
        }

        Console.ReadKey();
    }

检查出来.. !!你错过了迭代器&#39;我&#39;空间循环内的高度循环。

你会得到三角形: -

   *
  **
 ***
****

对于金字塔,您将需要奇数个星星。

答案 3 :(得分:0)

我知道您希望将此作为控制台应用程序执行,但如果您调整此代码,它应该可以正常工作

textbox1 / 2 替换为Consle.Readline / Write

    int pyramidstories = int.Parse(TextBox2.Text);
    int I = 1;

    while (I <= pyramidstories)
    {
        for (int spacecount = 0; spacecount < (pyramidstories - I); spacecount++)
        {
            TextBox1.Text += " ";
        }

        for (int starcount = 1; starcount < I + 1; starcount++)
        {
            TextBox1.Text += "*";
        }

        TextBox1.Text += Environment.NewLine;

        I++;
    }

正如您的问题所述,您需要:
4个空格1星
3个空格2星级 2个空格3星级 等。

所以你的金字塔看起来应该是这样的

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

上面的代码示例显示了如上图所示的金字塔

答案 4 :(得分:0)

获得金字塔(具有适当的间距),如下所示:

Pyramid example

您可以使用:

    static void Main(string[] args)
    {
        // The length of the pyramid
        int lengte = 18;

        // Loop through the length as given by the user
        for (int i = 0; i <= lengte; i++)
        {
            // If its an even number (we don't want 1-2-3.. but 1-3-5.. stars)
            if (i % 2 == 0)
            {
                // Calculate the length of the spaces we need to set
                int spatieLengte = (lengte / 2) - (i / 2);
                // Display spaces
                for (int spaties = 0; spaties <= spatieLengte; spaties++)
                {
                    Console.Write(" ");
                }
                // Display stars
                for (int sterren = 0; sterren <= i; sterren++)
                {
                    Console.Write("*");
                }
                // Newline
                Console.WriteLine();
            }
        }
        Console.ReadLine();
    }

显然,if块和spaceLengte变量并不是真正需要的。但我认为这会让OP更容易阅读。

祝你好运/成功;)