我目前正在为初学者级课程完成家庭作业,我需要帮助构建一个程序来测试作为int [] []呈现的sodoku解决方案是否有效。我这样做是通过创建检查行,列和网格的辅助方法。
要检查列,我调用一个名为getColumn的方法,该方法返回一列[]。当我测试它时它工作正常。然后我将它传递给一个名为uniqueEntries的方法,以确保没有重复项。
问题是,当我调用我的getColumn方法时,它返回一个只包含一个数字的数组(例如11111111,22222222,333333333)。我不知道为什么会那样做。这是我的代码:
int[][] sodokuColumns = new int[length][length];
for(int k = 0 ; k < sodokuPuzzle.length ; k++) {
sodokuColumns[k] = getColumn(sodokuPuzzle, k);
}
for (int l = 0; l < sodokuPuzzle.length; l++) {
if(uniqueEntries(sodokuColumns[l]) == false) {
columnStatus = false;
}
}
我的助手如下
public static int[] getColumn(int[][] intArray, int index) {
int[] column = new int[intArray.length];
for(int i = 0 ; i < intArray.length ; i++) {
column[i] = intArray[i][index];
}
return column;
}
谢谢!
答案 0 :(得分:0)
你说:
当我调用我的getColumn方法时,它返回一个只包含一个数字的数组(例如11111111,222222222,333333333)。
我发现getColumn
方法没有任何问题,因为getColumn(sodokuPuzzle, k)
与sodokuPuzzle[k]
相同,因此甚至不需要它。如果您要以第一个索引为列的方式构思2D数组,那么为了检查唯一性,您只需要编写一个方法来获取行。
您遇到的问题似乎与您未共享的代码的另一部分有关。我怀疑逻辑中存在一个接受用户输入的错误,并且错误地填充了这个错误。
最后,检查唯一性的提示(如果您允许使用它)将创建某种Set
(例如HashSet
)并添加所有项目(在您的情况下)整数)到那一组。如果该集合与原始项目数组具有相同的大小,那么这些项目都是唯一的,如果大小不同则存在重复项。