Добрый день. Я получил небольшую путаницу с истинными \ ложными вызовами возврата в логическом методе. Итак, код:
public class CheckOut {
public static void main(String[] args) {
int[][] m = new int[3][3];
int[][] m1 = new int[m.length][m[0].length];
System.out.println("Enter the nums for the first matrix : ");
getM(m);
System.out.println("Enter the nums for the second matrix : ");
getM(m1);
System.out.println(strictlyIdentical(m, m1));
}
static int[][] getM(int[][] m) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
m[i][j] = sc.nextInt();
}
}
return m;
}
static boolean strictlyIdentical(int[][] m, int[][] b) {
if (m.length != b.length && m[0].length != b[0].length) {
return false;
}
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
if (m[i][j] != b[i][j]) {
return false;
}
}
}
return true;
}
}
Вышеприведенный метод работает совершенно нормально и возвращает true, если две матрицы идентичны, но
почему, когда я сравниваю значения на их правильность и возвращаю true, если значения в if операторы верны и возвращают ложь в конце, я не получаю желаемого результата (это буквально верно для любых введенных чисел) Учтите это:
static boolean strictlyIdentical(int[][] m, int[][] b) {
if (m.length == b.length && m[0].length == b[0].length) {
return true;
}
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
if (m[i][j] == b[i][j]) {
return true;
}
}
}
return false;
}
}
Теперь я сравнивая значения по их подобию, а не по разнице, если можно так сказать ... И вывод этого кода, если дан следующий вход, выглядит следующим образом:
Enter the nums for the first matrix :
12 3 4 3 2 1 2 3 3
Enter the nums for the second matrix :
1 2 3 2 3 2 1 2 3
true
Таким образом, предыдущий метод возвращает true, тогда как числа видимо разные. Но логика c, по моему мнению, не изменилась ... есть ли определенное правило, которое диктует порядок операторов возврата? или в моем коде логика c проблема?