【发布时间】:2014-02-21 05:27:40
【问题描述】:
我正在尝试检查数组的每一行是否包含重复值(拉丁矩形检查)。我做了一个检查一维数组的方法,但我不知道如何将二维数组的一部分传递给它。这是我的一维数组检查方法:
public static boolean hasDuplicates(int [] inArray)
{
for(int i = 0; i < inArray.length; i++)
for(int j = i + 1; j < inArray.length; j++)
if(inArray[i] == inArray[j])
return true;
return false;
}
这是我调用我以前方法的方法的混乱:
public static boolean arrayChecker(int[][] inArray)
{
int [] splitRows = new int[inArray.length];
int [] splitCols = new int[inArray[0].length];
for(int row = 0; row < inArray.length; row++)
{
for(int col = 0; col < inArray[0].length; col++)
splitRows[col] = inArray[row][col];
if(hasDuplicates(splitRows))
return true;
}
for(int col = 0; col < inArray[0].length; col++)
{
for(int row = 0; row < inArray.length; row++)
splitCols[row] = inArray[row][col];
if(hasDuplicates(splitCols))
return true;
}
return false;
}
我现在知道它的问题是我的 splitRows 和 splitCols 数组不会在每次循环后重置值,因此当它再次运行时,它将检查新值与旧值。我似乎找不到解决方法。我尝试在循环之前设置 arrays = null ,但这会清除大小并将其搞砸。
感谢任何帮助。
编辑:这是我在 main 方法中的调用:
if (arrayChecker(originalArray))
System.out.println("Invalid");
else
System.out.println("Valid");
【问题讨论】: