我有一个基于俄罗斯方块构造的任务,我必须将其放入队列,然后从队列(如果条件适用)将阵型放入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 [,]数组是一个矩阵,它应该显示包含元素的抽屉,如自动俄罗斯方块填充整个矩阵而不留任何空白空间。)
答案 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