Paweł Walczuk
Paweł Walczuk

Reputation: 43

Check whether this matrix is symmetric in relation to the main diagonal

Given the number n, not exceeding 10, and a matrix of size n × n. Check whether this matrix is symmetric in relation to the main diagonal. Output the word “YES”, if it is symmetric and the word “NO” otherwise.

This is my code, it unfortunately does not work. Please, explain to me how to do it correctly :)

public class Main { public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int n= scanner.nextInt();
    int[][] number = new int[n][n];
    boolean ismatch = false;

    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        number[i][j] = scanner.nextInt();
      }
    }
    int unevenchecker = (n% 2);
    if (unevenchecker != 0) {
      for (int k = 0; k < number.length - 1; k++) {

        for (int l = 0; l < number.length - 1; l++) {
          if (number[k][l] == number[l][k]) {
            ismatch = true;
          }
        }
      }
      if (ismatch) {
        System.out.print("YES");
      }
    } else {
      System.out.print("NO");
    }
  }
}

Upvotes: 0

Views: 1666

Answers (2)

Morpheus
Morpheus

Reputation: 387

public class Main {

    static boolean isSymmetric(int mat[][], int size) { 
        for (int i = 0; i < size; i++) 
            for (int j = i + 1; j < size - i; j++) 
                if (mat[i][j] != mat[j][i]) 
                    return false;
        return true; 
    } 

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n= scanner.nextInt();
        int[][] number = new int[n][n];
        boolean ismatch = false;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
              number[i][j] = scanner.nextInt();
            }
        }

        if (isSymmetric(number, n)) {
            System.out.print("YES");
        } else {
            System.out.print("NO");
        }
    }
}

Notice that the nested loop into isSymmetric starts from j = i + 1, for not checking twice same condition.

Upvotes: 0

forpas
forpas

Reputation: 164194

The matrix is not symmetric if you find at least 1 symmetric couple where the 2 parts are not equal, so instead of checking for equality inside the loop, check for inequality:

  ismatch = true;
  for (int k = 0; k < number.length - 1; k++) {
    for (int l = 0; l < number.length - 1; l++) {
      if (number[k][l] != number[l][k]) {
        ismatch = false;
        break;
      }
    }
  }

Upvotes: 1

Related Questions