在java中添加锯齿状2D数组的列

时间:2014-03-16 03:32:53

标签: java arrays jagged-arrays

我一直都在寻找一个好的答案,但我很惊讶我无法找到一个完成了我想做的事情。我想创建一个方法,在锯齿状的2D数组中查找列和,无论大小,是否有锯齿状等。这是我的代码:

    public static int addColumn(int[][] arr, int x){
        int columnSum = 0;
        int i = 0;
        int j = 0;
        int numRows = arr.length;
        //add column values to find sum

        while (i < numRows){
            while (j < arr.length){
                columnSum = columnSum + arr[i][x];
                j++;
                i++;
            }
        }//end while loop
 return columSum;

因此,例如,考虑我有以下数组:

int[][] arr = { {10, 12, 3}, {4, 5, 6, 8}, {7, 8} };

我希望能够将x传递为2,并找到第3列的总和为9.或者将x传递给3以找到第4列,这只是8。我的代码有缺陷,因为我有它现在,我已经尝试了大约一百件事来使其发挥作用。这是一项家庭作业,所以我正在寻求帮助来理解逻辑。当我运行该方法时,我当然不断获得Out of Bounds Exception。我想我此刻已经过度思考,因为我不认为这应该太复杂了。谁能帮我吗?非常感谢!

3 个答案:

答案 0 :(得分:1)

我认为你的第二个while循环会让你的金额太大。你应该只需要迭代行。

while( i < numRows )
{
  if( x < arr[i].length )
  {
    columnSum += arr[i][x];
  }

  ++i;
}

答案 1 :(得分:0)

//我看到上面的代码都没有,因为在这里发布符合要求的代码。由于时间不够,代码可能看起来没有排列或优化。谢谢.... :)

package LearningJava;

import java.util.Scanner;

public class JaggedSum {


public static void main(String[] args) {
    int ik=0;
    int ij=0;
    Scanner scan=new Scanner(System.in);
    int p=0;
    int q=0;
    int[][]arr=new int[2][];
    System.out.println("Enter the value of column in Row 0 ");
    p=scan.nextInt();
    System.out.println("Enter the value of column in Row 1 ");
    q=scan.nextInt();
    arr[0]=new int[p];
    arr[1]=new int[q];

    for(int i=0;i<arr.length;i++){
        for(int j=0;j<arr[i].length;j++){
            arr[i][j]=scan.nextInt();
        }
    }

    for(int i=0;i<arr.length;i++){
        for(int j=0;j<arr[i].length;j++){
            System.out.print(arr[i][j]+" ");
        }
        System.out.println();

    }
    if(arr[1].length>arr[0].length){
     int[] columnSum=new int[arr[1].length];

        int x;

                for(x=0;x<arr[0].length;x++){
                columnSum[x] = arr[0][x] + arr[1][x];
                System.out.println(columnSum[x]); 

            }
              ik=arr[0].length;
              for(int j=ik;j<arr[1].length;j++){
                columnSum[j]= arr[1][j];
                System.out.println(columnSum[j]);
              }
    }
    else{
         int[] columnSum=new int[arr[0].length];

         int x;

                for(x=0;x<arr[1].length;x++){
                columnSum[x] = arr[0][x] + arr[1][x];
                System.out.println(columnSum[x]); 

            }
              ij=arr[1].length;
              for(int j=ij;j<arr[0].length;j++){
                columnSum[j]= arr[0][j];
                System.out.println(columnSum[j]);
              }
    }
    }
}

答案 2 :(得分:0)

Java 8 中,您可以将 IntStream 用于此目的:

public static int addColumn(int[][] arr, int x) {
    // negative column index is passed
    if (x < 0) return 0;
    // iteration over the rows of a 2d array
    return Arrays.stream(arr)
            // value in the column, if exists, otherwise 0
            .mapToInt(row -> x < row.length ? row[x] : 0)
            // sum of the values in the column
            .sum();
}
public static void main(String[] args) {
    int[][] arr = {{10, 12, 3}, {4, 5, 6, 8}, {7, 8}};
    System.out.println(addColumn(arr, 2)); // 9
    System.out.println(addColumn(arr, 3)); // 8
    System.out.println(addColumn(arr, 4)); // 0
    System.out.println(addColumn(arr, -1));// 0
}