【问题标题】:To solve upside-down rendering?解决倒置渲染?
【发布时间】:2013-02-28 16:26:10
【问题描述】:

我编写了这段 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();
    }

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

    █
   ██
  ███
 ████

【问题讨论】:

  • 所有代码按顺序执行。要在顶部写最长的块,你必须先写它。没有办法写到最后,但仍然在顶部,除非你想进入图形渲染引擎和点画......

标签: c# for-loop console nested rendering


【解决方案1】:

您需要反转您的循环条件,从 inremant 到 decremant..

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

输出将是;

这是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();
    }

这是一个DEMO

【讨论】:

  • Soner,谢谢这为我指明了我想去的方向,但是这些步骤正在下降,我希望他们走另一条路。如果我没有说清楚,我很抱歉。我会采纳你的想法并应用它,看看还能怎么做!再次感谢!
  • @MonteEmerson 你想上楼到右边吗?顺便说一句,您的问题并不清楚。
  • 是的,我知道对不起,我修改了。
  • 不,我是在和@Soner 开玩笑。我的答案是你想要的——不过你自己已经解决了——你需要从写空格开始。
  • 感谢 Soner 的帮助!
【解决方案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();
    }
}

【讨论】:

  • 加一用于升序;P
  • 感谢您的帮助休!
【解决方案3】:

应该是:

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

【讨论】:

  • 我认为这实际上会执行 0,1,2,3 而不是 1,2,3,4?最简单的更改,所以如果你编辑它是最好的答案..
【解决方案4】:

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

    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();

结果:

   █
  ██
 ███
████

【讨论】:

  • @Monte Emerson - 看我的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多