如何使用while语句绘制星号三角形?

时间:2014-04-05 17:08:59

标签: c# for-loop while-loop

这是(不工作的代码),它应该打印下面的形状,但不是:

static void Main(string[] args)
{
    int i = 1;
    int k = 5;
    int h = 1;

    while (i <= 5)
    {
        Console.WriteLine("");
        while (k > i)
        {
            Console.Write(" ");
            k--;
        }
        while (h <= i)
        {
            Console.Write("**");
            h++;
        }
        i++;
    }
    Console.ReadLine();

}

Screenshot

但是当我尝试使用while语句执行相同操作时,形状会完全混乱。

任何帮助?

5 个答案:

答案 0 :(得分:2)

您必须在循环中声明kh

static void Main(string[] args)
{
    int i = 1;
    while (i <= 5)
    {
        int k = 5;
        int h = 1;

        Console.WriteLine("");
        while (k > i)
        {
            Console.Write(" ");
            k--;
        }
        while (h <= i)
        {
            Console.Write("**");
            h++;
        }
        i++;
    }
    Console.ReadLine();
}

使用当前的解决方案,在第一次外循环迭代之后,内部循环不执行任何操作。

答案 1 :(得分:2)

int NumberOfLines = 5;
int count = 1;
while (NumberOfLines-- != 0)
{
    int c = count;
    while (c-- != 0)
    {
        Console.Write("*");
    }
    Console.WriteLine();
    count = count + 2;
}

这是最简单的实施。

答案 2 :(得分:0)

我不会为你解决只会给你一个提示: 使用3个循环语句

1. for line change
2. for spaces (reverse loop)
3. for printing * (odd series in this case) i.e. 2n-1

检查第三个声明 h&lt; = 2 * i - 1; 并且只打印一个*代替**

点击此处 http://ideone.com/xOB2OI

答案 3 :(得分:0)

问题是在输入最外层循环之前初始化ikh。在外循环内kh由内循环改变。在外循环kh的第二次执行时,具有与之前运行内循环后剩余的值相同的值。当外部循环中i递增时,将不会输入k循环,h循环只会运行一次。

考虑第二次执行时最外层循环中hk应具有的值。

答案 4 :(得分:0)

实际上我是通过'for'循环完成的,z是高度,x等于边长。

等腰三角形(x> z):

 public void Print(int x, int z)
        {
            var peakStart = x;
            var peakEnd = x;

            for (int i = 0; i < z; i++)
            {
                for (int j = 0; j < 2 * x + 1; j++)
                {
                    if (peakStart < 1.5 * x && j >= peakStart && j <= peakEnd)
                        Console.Write("*");
                    else
                        Console.Write(" ");
                }
                peakStart--;
                peakEnd++;
                Console.WriteLine("");
            }
        }