我有一个基于俄罗斯方块队形的任务,我必须将其放入队列中,然后从队列中(如果条件适用)将队形放入一个2D数组中,并对该数组进行最优填充。我从2D数组中创建了编队,并将它们放入队列中,但我不知道如何将队列中的编队放到2D数组中。确定编队是否进入二维数组的条件是是否有足够的空间可供其使用。如果没有,则应该将used ()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填充数组。(我编辑了代码,将匈牙利语变量更改为英语,并添加了一个条件,这样它就不会是无限循环。还有抽屉,array是一个矩阵,它应该显示一个包含元素的抽屉,就像一个自动俄罗斯方块,填充整个矩阵而不留下任何空白。)
发布于 2018-04-26 18:34:04
我对你的问题不是很有把握。您也没有提供有关、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 (因此,如果Fioki,j为0,那么您将出队并将您的队列E212>无限次出队,然后最终使您的程序崩溃,因为您正在将E114E214一个空E216出队),所以我认为您所指的是 if 语句,而不是使用while<代码>E220语句。
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
00000000000000000000https://stackoverflow.com/questions/50040180
复制相似问题