如何根据条件将2D阵列从队列放入另一个2D阵列? C#

时间:2018-04-26 10:03:24

标签: c# arrays matrix queue 2d

我有一个基于俄罗斯方块构造的任务,我必须将其放入队列,然后从队列(如果条件适用)将阵型放入2D阵列,最佳填充阵列。 我从二维数组中制作了编队并将它们放入队列,但我不知道如何从队列中获取编队到二维数组。确定地层是否进入2D阵列的条件是是否有足够的空间。如果没有,则编队应该入队()d到队列的末尾以便稍后再次使用。

int[,] I1 = new int[4, 1] { { 1 }, { 1 }, { 1 }, { 1 } };
int[,] I2 = new int[1, 4] { { 1, 1, 1, 1 } };
int[,] Z1 = new int[3, 2] { { 0, 1 }, { 1, 1 }, { 1, 0 } };

等。

这些是这个队列:

Queue<int[,]> myqueue = new Queue<int[,]>();
myqueue.Enqueue(I1);
myqueue.Enqueue(I2);
myqueue.Enqueue(Z1);

我尝试将它们复制到这样的2D数组中:

int[,] Drawer = new int[10, 20];
for (int i = 0; i < Drawer.GetLength(0); i++)
{
    for (int j = 0; j < Drawer.GetLength(1); j++)
    {
        while (Drawer[i,j]==0&& myqueue.Count >0)
        {
            int[,] dequeued = myqueue.Dequeue();
            for (int k = 0; k < dequeued.GetLength(0); k++)
            {
                for (int l = 0; l < dequeued.GetLength(1); l++)
                {
                    Drawer[i, j] = dequeued[k, l];
                }
            }
        }
    }
}

但它不起作用。我还想过不完全将项目复制到数组中,而是根据队列中的项目使用适当数量的1来填充数组。 (我编辑了代码并将匈牙利语变量更改为英语并添加了一个条件,因此它不会是一个无限循环。此外,Drawer [,]数组是一个矩阵,它应该显示包含元素的抽屉,如自动俄罗斯方块填充整个矩阵而不留任何空白空间。)

1 个答案:

答案 0 :(得分:0)

我不确定你的问题。您也没有提供有关 Fiok (数据结构等)的信息。

但我发现这些代码很奇怪:

while (Fiok[i,j]==0)
        {
            int[,] kisorolt = sor.Dequeue();
            for (int k = 0; k < kisorolt.GetLength(0); k++)
            {
                for (int l = 0; l < kisorolt.GetLength(1); l++)
                {
                    Fiok[i, j] = kisorolt[k, l];
                }
            }
        }

while 语句会为您提供无限循环,因为您没有更改代码中的 i j (因此,如果Fiok [i,j] ]为0,那么你将队列队列无限次,然后最终导致你的程序崩溃,因为你出队一个空队列),所以我认为你的意思是 if 语句而不是

if (Fiok[i,j]==0)
{
      int[,] kisorolt = sor.Dequeue();
      for (int k = 0; k < kisorolt.GetLength(0); k++)
      {
          for (int l = 0; l < kisorolt.GetLength(1); l++)
          {
              Fiok[i, j] = kisorolt[k, l];
          }
       }
}
else
{
   //put any else statement
}

我已经测试了你的代码,输出是:

 11000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000