在布尔方法Java中最后返回true和false语句之间的区别

美好的一天。我对布尔方法中的true \ false返回调用感到有些困惑。 所以代码是:

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 为什么当我比较值的正确性并在if语句中的val是正确的并且在末尾返回false时返回true我没有得到所需的输出。 考虑一下:

    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,而nums显然不同。 但是我认为逻辑并没有改变...  是否有确定返回语句顺序的特定规则?  还是我的代码中存在逻辑问题?

评论
  • lquia
    lquia 回复

    因此,我不确定您是否只是看了太长时间的代码而没有看到这一行代码,但是由于第一个if语句,它始终返回true。

        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;
    }
    

    如果长度相等,则第一个if语句将始终返回true。您提供的示例具有相同长度的矩阵,因此返回true。