如何检查二维数组是否为拉丁

时间:2019-02-26 15:22:16

标签: java

我有一个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");
    }
}

2 个答案:

答案 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。