我在做一个数独游戏。多维数组称为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。
我不认为这是因为findDoublicates
和flattenArray
,因为他们在我的其他情况下工作完美。在上面的例子中一切正常,但在第二个例子中出现了问题,我无法注意到它是什么。
我错过了什么明显的吗?
答案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