我有一个assignemnt检查2d数组是否为拉丁。 我做了2种单独的方法,一种使用第一种方法检查数组是否包含重复项,另一种检查数组是否为拉丁。但是由于某种原因,对于拉丁数组,它会返回false。有人可以帮我吗?
package car;
public class Car {
private static boolean isLatin;
public static boolean isLatin(int[][]array){
for (int i = 0; i<array.length ;i++) {
// check for duplicates in each row
if(duplicates(array[i])) {
return false;
}
// create a column array
int[] column = new int[array[i].length];
for(int j = 0; j<array[i].length; j++) {
// check for duplicates in each column
if(duplicates(column)) {
return false;
}
}
}
return true;
}
public static boolean duplicates(int[] array) {
for (int i = 0; i<array.length; i++) {
for(int j = i+1; j<array.length; j++) {
if ( array[i] == array[j]) {
return true;
}
}
}
return false;
}
public static void main(String[] args) {
int [][] arr2D={{10,30,20,0},
{0,20,30,10},
{30,0,10,20},
{20,10,0,30} };
if (isLatin(arr2D))
System.out.println("Yes, 2D array is a Latin Square");
else
System.out.println("NO, 2D array is NOT a Latin Square");
}
}
答案 0 :(得分:0)
这里的问题是如何检查列。您正在创建名为int[]
的{{1}},但从未添加任何内容。这意味着所有column
元素都初始化为其默认值零。这意味着int
始终等于column
(考虑到您对4x4数组的测试输入),它当然具有重复项,从而导致总体检查始终指示矩阵不是拉丁方。
答案 1 :(得分:0)
在本节中:
int[] column = new int[array[i].length];
for(int j = 0; j<array[i].length; j++)
{
// check for duplicates in each column
if(duplicates(column))
{
return false;
}
}
变量列被实例化为没有值的int数组。因此,java使用默认值 0 填充数组的所有位置。这使得 duplicates(column)始终都返回true,从而使该函数始终都返回false。