首页 > 解决方案 > 为什么我会收到此 IndexOutOfBoundsException 错误?pt2

问题描述

所以我目前正试图找到这些行和列的平均值,并且我已经得到了所有这些行和列的总和。但是由于此代码而出现此错误

int e[][] = {{10,30, 50, 200},
             {60, 40,70, 55},
             {80, 5, 35, 100}};
    
      int sumRow = 0; 
      int sumCol = 0;           
      for (int r = 0; r < e.length; r++)
      { 
         for (int c = 0; c < e[r].length;c++)
         {
            sumRow = sumRow + e[r][c];
         }
         System.out.println(sumRow);
      } 
      
      for (int r = 0; r < e[r].length; r++)
      { 
         for (int c = 0; c < e.length;c++)
         {
            sumCol = sumCol + e[c][r];
         }
         System.out.println(sumCol);
      } 
}

问题出在第二个嵌套 for 循环的开头,我对此很陌生,所以如果很明显,请不要感到惊讶。

  for (int r = 0; r < e[r].length; r++)

这就是问题所在。

感谢您的帮助。

标签: java

解决方案


如果你的数组不是锯齿状的,你可以只使用 e[0].length。在您的代码中,当 r 为 3 并且您的数组没有 1 时,e[r].length 将检查第四行的长度,因此您可以使用 e[0].length 预先确定它。

int e[][] = {{10, 30, 50, 200},
                 {60, 40, 70, 55},
                 {80, 5, 35, 100}};

    int sumRow = 0;
    int sumCol = 0;
    for (int r = 0; r < e.length; r++) {
        for (int c = 0; c < e[r].length; c++) {
            sumRow = sumRow + e[r][c];
        }
        System.out.println(sumRow);
    }

    for (int r = 0; r < e[0].length; r++) {
        for (int c = 0; c < e.length; c++) {
            sumCol = sumCol + e[c][r];
        }
        System.out.println(sumCol);
    }

推荐阅读