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
相关产品推荐
相关产品推荐

