解决倒置渲染问题?

时间:2013-02-28 16:26:11

标签: c# for-loop console nested rendering

我编写了这段C#,以帮助我理解嵌套for循环如何用于渲染二维数据。

这是输出的样子。

████
███
██
█

我想这样做,以便顶部的4个块在底部呈现,基本上以相反的顺序呈现,以便步骤提升。然而,控制台窗口只向下渲染,因此传统的思维方式是不对的。以下是我的代码。

static void Main(string[] args)
    {
        int i = 0;
        int j = 0;

        for (i = 0; i < 4; i++) 
        {
            Console.Write('\n');
            for (j = i; j < 4; j++) 
            {
                Console.Write("█");
            }
        }
        Console.ReadKey();
    }

这就是我希望输出的样子。

    █
   ██
  ███
 ████

4 个答案:

答案 0 :(得分:4)

您需要循环条件从inremant转换为 ..

for (i = 0; i < 4; i++) 
{
    Console.Write('\n');
    for (j = i; j >= 0; j--) 
    {
        Console.Write("█");
    }
}

输出将是;

enter image description here

这是DEMO

更新:由于您改变主意,因此需要在每列中添加空格(列号为i4 - 1次。

   public static void Main(string[] args)
    {
        int i = 0;
        int j = 0;
        for ( i = 0; i < 4; i++ )
        {
            for ( j = 0; j < 4; j++ )
            {
                if ( j < 3 - i )
                    Console.Write(" ");
                else
                    Console.Write("█");
            }
            Console.Write('\n');
        }

        Console.ReadKey();
    }

enter image description here

这是 DEMO

答案 1 :(得分:2)

应该是:

  for (j = 3 - i; j < 4; j++)
  {
       Console.Write("█");
  }

答案 2 :(得分:2)

class Program
{
    const int Dimension = 4;

    static void Main(string[] args)
    {
        char[] blocks = new char[Dimension];
        for (int j = 0; j < Dimension; j++)
            blocks[j] = ' ';

        for (int i = 0; i < Dimension; i++)
        {
            blocks[Dimension - i - 1] = '█';

            for (int j = 0; j < Dimension; j++)
                Console.Write(blocks[j]);

            Console.WriteLine();
        }
        Console.ReadKey();
    }
}

答案 3 :(得分:1)

最简单的方法是:只需反转内部循环条件并递减计数器而不是递增计数器:

    for (i = 0; i < 4; i++) 
    {
        Console.Write('\n');
        for (j = i; j >= 0; j--) 
        {
            Console.Write("█");
        }
    }
    Console.ReadKey();

返回:

█
██
███
████

从右到左版本:

    for (i = 0; i < 4; i++) 
    {
        for(j = 0; j < 4; j++)
        {
            if(j < 3 - i)
                Console.Write(" ");
            else
                Console.Write("█");
        }
        Console.Write('\n');
    }
    Console.ReadKey();

结果:

   █
  ██
 ███
████