首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据条件将队列中的2D数组放入另一个2D数组中?C#

如何根据条件将队列中的2D数组放入另一个2D数组中?C#
EN

Stack Overflow用户
提问于 2018-04-26 18:03:24
回答 1查看 154关注 0票数 0

我有一个基于俄罗斯方块队形的任务,我必须将其放入队列中,然后从队列中(如果条件适用)将队形放入一个2D数组中,并对该数组进行最优填充。我从2D数组中创建了编队,并将它们放入队列中,但我不知道如何将队列中的编队放到2D数组中。确定编队是否进入二维数组的条件是是否有足够的空间可供其使用。如果没有,则应该将used ()d加入到队列的末尾,以便稍后再次使用。

代码语言:javascript
复制
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 } };

等。

这些是这个队列中的:

代码语言:javascript
复制
Queue<int[,]> myqueue = new Queue<int[,]>();
myqueue.Enqueue(I1);
myqueue.Enqueue(I2);
myqueue.Enqueue(Z1);

我尝试将它们复制到一个2D数组中,如下所示:

代码语言:javascript
复制
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填充数组。(我编辑了代码,将匈牙利语变量更改为英语,并添加了一个条件,这样它就不会是无限循环。还有抽屉,array是一个矩阵,它应该显示一个包含元素的抽屉,就像一个自动俄罗斯方块,填充整个矩阵而不留下任何空白。)

EN

回答 1

Stack Overflow用户

发布于 2018-04-26 18:34:04

我对你的问题不是很有把握。您也没有提供有关、Fiok、(数据结构等)的信息。

但是我发现这些代码非常奇怪:

代码语言:javascript
复制
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语句将给您无限循环,因为您没有在代码上更改ij (因此,如果Fioki,j为0,那么您将出队并将您的队列E212>无限次出队,然后最终使您的程序崩溃,因为您正在将E114E214一个空E216出队),所以我认为您所指的是 if 语句,而不是使用while<代码>E220语句。

代码语言:javascript
复制
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
}

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

代码语言:javascript
复制
 11000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50040180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档