2D阵列(褴褛) - 打印每列总和

时间:2015-02-12 08:30:18

标签: java arrays for-loop multidimensional-array indexoutofboundsexception

我正在尝试计算2D数组的逐列和。

对于这个2D数组:

int[][] array = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

我打印每列总和没有问题。

这是我的代码

int total;
for (int col = 0; col < array[0].length; col++)
{
  total = 0;
  for (int row = 0; row < array.length; row++)
    total += array[row][col];
  System.out.println("Column " + col + " total: " + total);
}

但是,对于这个参差不齐的2D数组:

int[][] array = {{1,2},{5,6,7},{9,10,11,12}};

如果没有出现 outofboundsexception 错误,我似乎无法打印最后两列。我们的教授并没有真正教我们try和catch语句,所以我假设必须进行某种小调整。但是,我已经篡改了上面的代码来打印最后两列,但没有运气......

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

试试这个:

int total;
int max = //This is the max number of column one row can have 
for (int col = 0; col < max; col++)
{
  total = 0;
  for (int row = 0; row < array.length; row++)
    if(col < array[row].length)//Check for row length here.
       total += array[row][col];
  System.out.println("Column " + col + " total: " + total);
}

基本上,您需要在访问其元素之前先检查行的长度。

找到最大值:

int max = 0;
for(int i = 0; i < array.length; i++)
    max = Math.max(array[i].length, max);

答案 1 :(得分:1)

您不需要捕捉任何例外情况。首先,您应该找出2D阵列中最长的行(您需要一个初步循环)。

假设它是x。然后在外部循环中从0迭代到x-1,在内循环中,在访问array[row][col]之前,确保array[row].length > col

答案 2 :(得分:1)

以下是该程序的正确代码::我从上面学到了帮助材料,但由于代码是零碎的,我得到了错误,特别是最大值被取了最大值(如果我们需要较低的最大数量)下一个计数器然后这个程序失败了)

package arrayPractice;

public class SumColumArray {
    public static void main (String [] args){
        int [][] matrix = new int [5][];
            matrix[0] = new int[2];
            matrix[1] = new int[3];
            matrix[2] = new int[4];
            matrix[3] = new int[2];
            matrix[4] = new int[1];


    int total = 0;
    int max = 0;
    for(int row = 0; row < matrix.length; row++){
    max = matrix[row].length; // Variable Length of Column Accessing 
    System.out.println(max);
    for(int column = 0; column < max; column++){
    total = 0;
    matrix[row][column] = (int)(Math.random() * 100);
    if(column < matrix[row].length);
    total += matrix[row][column];
    System.out.println("Column " + column + " total: " + total);

    }
     }
   }
}

答案 3 :(得分:0)

你的教授可能不接受这个,因为他还没有教过你(但是),但最优雅的解决方案是让Java为自己做出低级循环决策。您可以使用for-each loop

执行此操作
int total = 0;
int iterator = 0; // this variable is only necessary if you need to know which row you're in
for (int[] row : array) {
    int sum = 0;
    for (int item : row) {
        sum += item;
    }
    System.out.println("Column " + iterator + " total: " + sum);
    total += sum;
    iterator++;
}
System.out.println(total);

它的工作方式是指定一个数组及其元素的类型。因此,int[][]int[]的数组,这就是您指定for (int[] row : array)的原因。对于此二维row[]&#34;中的每个一维array[][],您可以将其读作&#34;。在循环中,您在int的每个row[]上嵌套另一个循环。