循环遍历多维数组错误

  • 本文关键字:数组 错误 遍历 循环 c#
  • 更新时间 :
  • 英文 :


我在做一个数独游戏。多维数组称为array。我基本上是将数组扁平化,然后搜索重复项。我似乎无法转换这段低效的代码:

if(true)
return
findDoublicates(flattenArray(array, 0, 0))
&& findDoublicates(flattenArray(array, 0, 3))
&& findDoublicates(flattenArray(array, 0, 6))
&& findDoublicates(flattenArray(array, 3, 0))
&& findDoublicates(flattenArray(array, 3, 3))
&& findDoublicates(flattenArray(array, 3, 6))
&& findDoublicates(flattenArray(array, 6, 0))
&& findDoublicates(flattenArray(array, 6, 3))
&& findDoublicates(flattenArray(array, 6, 6));
}
return true;

for (int i = 0; i < array.Length; i += 3)
{
for (int j = 0; j < array.Length; j += 3)
{
if (findDoublicates(flattenArray(array, i, j))) return false;
}
}
return true;

基本上,flattenArray方法接受一个多维数组和2个坐标,它将数组的3*3部分平展。不管什么原因,它总是返回false。

我不认为这是因为findDoublicatesflattenArray,因为他们在我的其他情况下工作完美。在上面的例子中一切正常,但在第二个例子中出现了问题,我无法注意到它是什么。

我错过了什么明显的吗?

答案

if(true)
{
for (int i = 0; i < array.Length; i += 3)
{
for (int j = 0; j < array.Length; j += 3)
{
if (!findDoublicates(flattenArray(array, i, j))) return false;  
}
}
}
return true;

忘记反转findDoublicates的返回

可能是你在第二段代码中弄错了条件。

在第一个代码片段中,如果所有的findDoublicates()都返回true,则返回true,如果第一个findDoublicates()返回false,则返回false

在第二个代码片段中,一旦发现findDoublicates()true,就返回false

试试这个:

if(true)
{
for (int i = 0; i < array.Length; i += 3)
{
for (int j = 0; j < array.Length; j += 3)
{
if (!findDoublicates(flattenArray(array, i, j))) return false;  
}
}
}
return true;

另外,您可能希望将其重命名为findDuplicates()

如果每个检查都为真,则第一部分代码返回真,如果其中一个检查为假,则返回假。

第二段代码如果每次检查都为假则返回true,如果其中一个检查为真则返回false