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

Java多维数组第二条对角线输出数值顺序颠倒问题排查

问题原因

你的diagonal2方法索引逻辑写反了,直接导致元素顺序和缩进完全错位:
对于4*4二维数组的副对角线(你说的第二条对角线),正确的元素坐标(行号,列号)应该是:

  • (0,3) → 685,前导补3组4空格,输出在第一行最右侧
  • (1,2) → 236,前导补2组4空格,输出在第二行右数第二位置
  • (2,1) → 124,前导补1组4空格,输出在第三行右数第三位置
  • (3,0) → 986,无前导空格,输出在第四行最左侧

你现有代码的错误逻辑:

  • 外层循环用z遍历列号,初始行标记v=3,第一次循环z=0(第0列)时,取的是array[v][z] = array[3][0] = 986,还按v=3补了3组空格,直接把本该在最左下角的986打到了第一行最右侧
  • 之后每次循环v递减、z递增,取到的元素依次是124、236、685,刚好把对角线元素顺序完全颠倒,缩进量也跟着v同步错位,最后本该在第一行最右侧的685被打到了最后一行最左侧,和预期结果完全相反。
  • 额外隐患:diagonal1方法用了类成员变量i做计数,没有在方法入口重置,多次调用该方法会直接触发数组索引越界。
修复代码

修正后的diagonal2方法

public void diagonal2(int array[][]){
    int arrLength = array.length;
    // 按行遍历
    for(int row = 0; row < arrLength; row++){
        // 副对角线当前行对应的列索引 = 数组长度-1 - 行号
        int col = arrLength - 1 - row;
        // 打印前导缩进
        for(int spaceCount = 0; spaceCount < col; spaceCount++){
            System.out.print("    ");
        }
        // 打印对角线元素后换行
        System.out.println(array[row][col]);
    }
    System.out.println("- - - - -");
}

顺带修正diagonal1的隐患(去掉类成员变量依赖,避免越界)

public void diagonal1(int array[][]){
    int arrLength = array.length;
    for(int row = 0; row < arrLength; row++){
        // 主对角线列号和行号相等
        for(int spaceCount = 0; spaceCount < row; spaceCount++){
            System.out.print("    ");
        }
        System.out.println(array[row][row]);
    }
    System.out.println("- - - - -");
}

修复后可以把类里冗余的成员变量i=0删掉,避免无用变量占用空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:48:41