You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java代码中的嵌套循环未执行直接被跳过?

为什么矩阵对称判断的循环会被直接跳过?

我写了一段判断矩阵是否对称的Java代码,但循环被直接跳过,添加的打印语句完全没执行。即使把循环条件改成i - 2和j - 2也没用,最终方法返回了true,但我的矩阵明明不是对称的。

代码片段:

public static void main(String[] args) throws Exception {
    int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    System.out.println(hasSymmetry(matrix)); // 返回true,说明isComputable条件已满足,否则会返回false。
}

public static boolean hasSymmetry(int[][] matrix){
    // isComputable在其他地方定义,且工作正常。
    if(!isComputable(matrix)){    
        return false;
    }
    
    int length = matrix.length;

    // 循环被直接跳过且无报错,我添加了打印语句用于排查,但并未执行。
    for (int i = 0; i == length; i++){
        System.out.println("Inside loop" + i);
        for (int j = 0; j == length; j++){
            if (matrix[i][j] != matrix[j][i]) {
                System.out.println(matrix[i][j] + " vs " + matrix[j][i]);
                return false;
            }                
        }
    }
    return true;
}

问题出在for循环的条件判断逻辑上:

for循环的语法是for(初始化; 循环继续条件; 迭代),只有当中间的条件为true时,循环体才会执行。

你的代码里写的是:

for (int i = 0; i == length; i++)

初始i=0,而length=3(因为矩阵是3x3的),0 == 3是false,所以循环直接终止,根本不会进入循环体。内层循环的j == length也是同样的问题。

修正方案

把循环条件改成小于length的判断,这样才能遍历矩阵的每一个元素:

public static boolean hasSymmetry(int[][] matrix){
    if(!isComputable(matrix)){    
        return false;
    }
    
    int length = matrix.length;

    for (int i = 0; i < length; i++){
        System.out.println("Inside loop" + i);
        for (int j = 0; j < length; j++){
            if (matrix[i][j] != matrix[j][i]) {
                System.out.println(matrix[i][j] + " vs " + matrix[j][i]);
                return false;
            }                
        }
    }
    return true;
}

额外优化

其实判断对称矩阵不需要遍历所有元素,只需要遍历上三角(或下三角)区域即可,避免重复判断,提升效率:

public static boolean hasSymmetry(int[][] matrix){
    if(!isComputable(matrix)){    
        return false;
    }
    
    int length = matrix.length;

    for (int i = 0; i < length; i++){
        // j从i+1开始,只判断对角线以上的元素
        for (int j = i + 1; j < length; j++){
            if (matrix[i][j] != matrix[j][i]) {
                System.out.println(matrix[i][j] + " vs " + matrix[j][i]);
                return false;
            }                
        }
    }
    return true;
}

内容的提问来源于stack exchange,提问作者Hopfield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:25:17