Home > Software design >  Check if all 9 digits are in 3*3 2d array in java
Check if all 9 digits are in 3*3 2d array in java

Time:12-09

I'm working on problem where I have to check if all 9 digits are in 3x3 matrix.
I know that I should loop over the 3x3 matrix and check for each number is digit or not. Here is my code, but I don't have directions to do it.

public boolean find(int num) {
    int []a = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    for (int i = 0; i < a.length; i  )
        if (a[i] == num)
            return true;
    return false;
}

public boolean allDigit() {  
    boolean isDigit = true;
    for (int i = 0; i< _3x3.length; i  ) {
        for(int j = 0; j < _3x3[i].length; j  ) {
            if (!find(_3x3[i][j]))
                isDigit = false;
        }
    }
}

CodePudding user response:

The presented code contains several typos:

  • type of num parameter in find has to be int
  • method allDigit should return isDigit in the end
  • input matrix _3x3 needs to be defined and populated somewhere, or passed to allDigit as an argument.

After fixing the mentioned issues the code should detect if all the numbers in _3x3 array belong to the closed range [1, 9], that is, if the input matrix contains 1 in all its cells, the code returns true.

However, if the purpose of the task is to check that the input matrix contains all digits, that is, there is no duplicate entry, then the separate find method should not be called. Instead a boolean array is needed to check for duplicate entries:

public boolean allDigitsPresent(int[][] arr) {
    boolean[] digitSet = new boolean[10];
    for (int i = 0; i < arr.length; i  ) {
        for (int j = 0; j < arr[i].length; j  ) {
            int d = arr[i][j]; // digit
            if (d <= 0 || d >= digitSet.length) {
                return false; // invalid value in the matrix
            }
            if (digitSet[d]) { // already set, duplicate is found
                return false;
            }
            digitSet[d] = true;
        }
    }
    return true; // no duplicate digit is found, all digits are in range [1..9]
}
  • Related