Java计算矩阵对角线和时for循环i!=j条件不生效问题求助
问题根源
for 循环的条件块是循环继续执行的必要前提,而非「当前次迭代是否执行累加」的过滤规则,这是你注释代码失效的核心原因。
注释代码的执行流程拆解
你注释的副对角线计算代码,运行逻辑如下:
- 初始索引
i=0,j=2,判断循环条件:i != j && i < A.length && j >= 0结果为真,执行累加A[0][2],随后i自增为1,j自减为1 - 第二次判断循环条件时,
i != j不成立,整个循环条件返回假,循环直接终止 - 你需要统计的
A[2][0]完全没有被遍历到,自然计算结果不符合预期。
你后续写的嵌套 if 的版本逻辑是正确的:循环只要索引在合法范围内就继续执行,每次进入循环后单独判断当前元素是不是重复的中心元素,仅跳过累加不会终止循环,所以能覆盖到 A[2][0] 的统计。
简化写法参考
如果不想在循环里嵌套判断,可以用更简洁的实现:
public class sumDia { public static void main(String[] args){ int[][] A = {{1, 2, 3}, {4, 5, 6}, {6, 7, 8}}; int sum = 0; int n = A.length; // 同时遍历两条对角线 for(int i = 0; i < n; i++){ sum += A[i][i]; // 主对角线元素累加 sum += A[i][n - 1 - i]; // 副对角线元素累加 } // 奇数阶矩阵减去重复计算的中心元素 if(n % 2 == 1){ sum -= A[n/2][n/2]; } System.out.println("Sum of Diagonals is : " + sum); } }
内容的提问来源于stack exchange,提问作者Seraj
相关产品推荐
相关产品推荐

