我正在尝试计算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语句,所以我假设必须进行某种小调整。但是,我已经篡改了上面的代码来打印最后两列,但没有运气......
有什么想法吗?
答案 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[]
上嵌套另一个循环。