【发布时间】:2016-12-09 12:47:53
【问题描述】:
我正在尝试对堆叠的立方体数组进行排序。 数组看起来像这样(一个例子)
Nth Cube | Position (0, its on the desk, >0, its on another cube)
---
1|6
---
2|8
---
3|0
---
4|0
---
5|0
---
6|0
---
7|1
---
8|4
---
看起来像这样可视化
[7] [2]
---
[1] [8]
---
[6] [4] [3] [5]
---
我整理了另一个上的立方体:
string[,] t 在这种情况下是整个数组
static string[,] stackedCubes(string[,] t)
{
string[,] stackedHelp = new string[NumberOfStacked(),2];
int j = 0;
for (int i = 0; i < t.GetLength(0); i++)
{
if (t[i, 1]!="0")
{
stackedHelp[j, 0] = t[i, 0];
stackedHelp[j, 1] = t[i, 1];
j++;
}
}
return stackedHelp;
}
结果如下:
1|6
---
2|8
---
7|1
---
8|4
---
现在我试图从顶部放下它们(所以 7/2 然后 1/8)
string[,] t 从这里开始是stackedCubes
static string[,] Putdown(string[,] t)
{
string[,] stackedOrder = new string[NumberOfStacked(), 2];
int j = 0;
do
{
for (int i = 0; i < t.GetLength(0); i++)
{
if (t[i, 1] == t[j, 0])
{
j = i;
}
else if(IsSomethingOnTheCube(t[j,0],t)==false)
{
stackedOrder[i, 0] = t[j, 0];
stackedOrder[i, 1] = "0";
t[i, 1] = "0";
}
}
}
while (AreAllTheCubesOnTable(t) != true);
return stackedOrder;
}
这里我从第一个 Cube 1(t[j,0]) 出发并检查上面是否有东西,它在 t[i,1] 上找到它并返回 7(t[j,0] ) 并返回。 我在这里检查一下 Cube 上是否有东西
static bool IsSomethingOnTheCube(string Cube,string[,] t)
{
for (int i = 0; i < t.GetLength(0); i++)
{
if(Cube==t[i,1])
{
return true;
}
}
return false;
}
我还检查他们是否都在桌子上(在做的时候)
static bool AreAllTheCubesOnTable(string[,] t)
{
for (int i = 0; i < t.GetLength(0); i++)
{
if (t[i, 1] != "0")
{
return false;
}
}
return true;
}
而且输出全错了:
7|0
---
7|0
---
7|0
---
7|0
---
什么时候应该是这样的:
7|0
---
1|0
---
2|0
---
8|0
---
我在哪里索引错误?(或其他)
【问题讨论】:
-
您的预期结果 (7|0, 1|0, 2|0, 8|0) 应该代表什么?
-
Putdown() 的返回值 - 即 string[,]StackedOrder - 完成后
-
您在问题中使用的领域语言令人困惑;一个“立方体”是“在桌子上”或“在另一个立方体上”,对于您大脑之外的人或知情者之外的人来说绝对没有任何意义。用简单的代码说话。
-
@eurotrash 虽然这可能是你的意见,但我只是想象了一个由立方体组成的金字塔。因此,虽然您可能认为它没用,但 OP 描述帮助我将他的问题置于上下文中
-
是的,我也不知道这应该做什么。