1)您想循环遍历这些值,例如使用 for 循环。这比长长的 if-else-if 链要好得多。
2)要跟踪看到的值,一种简单的方法可能是使用列表。我会尽量让这个例子尽可能简单,因为你要求“没有任何进展”。
public boolean checkRow(int rowNumber)
{
ArrayList numbersSeen = new ArrayList();
for(int i = 0; i < 9; i += 1)
{
if(sudokuArray[i][rowNumber] != -1 && numbersSeen.contains(sudokuArray[i][rowNumber]))
{
return true;
}
}
return false;
}
如果 rowrowNumber
在由 指定的二维数组中有重复的数字,这将返回 true,否则返回sudokuArray
false。请注意sudokuArray != -1
, 考虑到您提到的空方块的 -1 占位符。
当你编译这样的东西时,如果编译器在尝试将整数放入数组列表时出错,你可能必须通过指定ArrayList<Integer>
. 我不记得当您指定 Object 类型的目标时,Java 是否会为您自动装箱原语。
这会引出一个小的副课,因为您是新手,这可能对您有益:Java 既有原始类型(布尔、字节、短、整数、长、浮点、双精度)和原始类型的对象版本(布尔、字节、整数等)。如果你这样做int i = 0;
,Integer i2 = i;
Java 会很好地为你做转换。
checkColumn
会非常相似。check3X3area
(或任何你想叫它的名字)可能有点相似;也许您可以使用 2 个 for 循环,一个嵌套在另一个中,每个循环 3 次而不是 9 次。这将留给您作为练习。
此外,您可以将此通用化,以允许尺寸不是 9 的数独板进行一些修改。