我试图制作一个方法,搜索数组中的行和列以获取重复项,但到目前为止我写的内容不起作用,我不知道如何从这里开始:
private boolean isOrderValid(int[][] boardNumbers){
for (int i = 0; i < Size; i++) {
for (int j = 0; j < Size; j++) {
int CheckedNumber = boardNumbers[i][j];
boardNumbers[i][j]=-1;
for (int q = 0; q < Size; q++) {
for (int l = 0; l < Size; l++) {
if (CheckedNumber==boardNumbers[q][l]){
return true;
}
boardNumbers[i][j]=CheckedNumber;
}
}
}
}
return false;
}
答案 0 :(得分:0)
检测重复项的一种简单方法是使用Java Set
类型,该类型旨在拒绝重复项。特别是,如果将值添加到先前已添加到集合中的集合,则Set
方法add
将返回false
。这样您就知道自己遇到了重复的值。
因此,实现一个检查多维int
数组重复的方法的简单方法是:
private static boolean arrayContainsDuplicateValues(int[][] multiArray) {
Set<Integer> dupeChecker = new HashSet<>();
int rows = multiArray.length;
for (int rowIndex = 0; rowIndex < rows; ++rowIndex) {
int columns = multiArray[rowIndex].length;
for (int colIndex = 0; colIndex < columns; ++colIndex) {
int value = multiArray[rowIndex][colIndex];
if (!dupeChecker.add(value)) {
// We've already added this vaule to the Set before, so this
// value is a duplicate.
System.out.println("Dupe: " + value);
return true;
}
}
}
// All of the values from the array were added to the Set without any
// duplicates being found.
return false;
}
这只是迭代遍历数组的每个元素(动态检查每个维度中的元素数量),然后将每个值添加到Set<Integer>
,该dupeChecker.add(value)
纯粹是为了检测重复项而创建的。如果对false
的调用返回true
,那么我们就知道我们之前已经看过该值,并且该方法返回Size
以指示该数组确实包含重复值。
请注意,此方法效率最高。例如,您现有的代码似乎假设数组的每个维度的大小为size
(并且,根据上面的注释,变量名称不应以大写字母开头,因此这应该是{{ 1}})。如果数组的维度始终是已知的固定大小,那么您就不需要保留测量长度的代码(&#34;行&#34;&#34;列&#34;计数并且您可以将已知的固定大小硬编码到循环中。但是,如果效率并不重要,那么保持动态检查通常更安全,以避免在未来阵列的尺寸/形状发生变化时必须修改代码。此外,如果您事先知道数组的维度,则可以为HashSet<>()
构造函数调用一个合适的初始容量,以避免强制Java调整HashSet
的大小以适应实际的元素数。
哦,并删除对System.out.println
的通话。我已将其保留,因此您可以看到哪个值被检测为重复值,但通常您不应在生产代码中将System.out.println
调用。
答案 1 :(得分:0)
你正在使用四个循环OMG,你的程序复杂性将是n4。
这里我们可以使用非常简单和优化的方法。
private boolean isOrderValid(int[][] boardNumbers){
Set<Integer> tempSet = new HashSet<Integer>();
boolean dupliacteFound = false;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
int CheckedNumber = boardNumbers[i][j];
if(!tempSet.add(CheckedNumber)){
dupliacteFound = true;
break;
}
}
}
return dupliacteFound;
}