【问题标题】:Sum Specified Column Jagged Array求和指定列交错数组
【发布时间】:2014-03-10 01:50:24
【问题描述】:

我的家庭作业要求输出锯齿状二维数组的指定列的总和。我已经看到其他解决方案展示了如何获取所有列的总和,但不是特定的列。我遇到的问题是,如果输入一列并且二维数组的一行中不存在任何元素,我会得到一个 java.lang.ArrayIndexOutOfBoundsException。

// returns sum of specified column 'col' of 2D jagged array
public static int columnSum(int[][] array, int col) {
    int sum = 0;

// for loop traverses through array and adds together only items in a specified column
    for (int j = 0; j < array[col].length; j++) {
    sum += array[j][col];
    }

return sum;
} // end columnSum()

示例:不规则数组输入(类名为 RaggedArray)

int[][] ragArray = { {1,2,3}, 
                     {4,5}, 
                     {6,7,8,9} };

System.out.println(RaggedArray.columnSum(ragArray, 2));

这显然给了我一个 ArrayIndexOutOfBoundsException,但如果要求指定列作为参数,我不知道如何修复它。有任何想法吗?感谢您提供任何帮助或建议!

【问题讨论】:

    标签: arrays multidimensional-array jagged-arrays


    【解决方案1】:

    在你的循环中,做一个

    try{
      sum += array[j][col];
    }catch(ArrayIndexOutOfBoundsException e){
    
    }
    

    block,如果没有,它只是跳过,并继续前进到下一个。 您还必须导入该异常。如果遇到麻烦,只需查看 try/catch 块的工作原理

    【讨论】:

    • 非常感谢!有用!我在想我必须使用 try catch,但我还是 Java 新手,不确定。
    • 没问题!如果这是您的答案,请继续标记它
    【解决方案2】:

    这是我找到的另一个解决方案。

    // returns sum of the column 'col' of array
        public static int columnSum(int[][] array, int col) {
        int sum = 0;
    
        // for loop traverses through array and adds together only items in a specified column
        try {
            for (int j = 0; j < array.length; j++) {
                if (col < array[j].length)
                    sum += array[j][col];   
               }
            }
        catch (ArrayIndexOutOfBoundsException e){
            }
    
        return sum;
    } // end columnSum()
    

    【讨论】:

      【解决方案3】:
      public class JaggedArrayColSum {
          int[] jackedArrayColSum(int arr[][]){
              
              int sum;
              int maxLen=0;
              boolean status;
              
              
              //START #MAX LENGTH
              //Finding the max length of inner array
              for(var a=0;a<arr.length;a++) {
                  status=true;
                  for(var b=0;b<arr.length;b++) {
                      if(a==b)continue;
                      if(arr[a].length<arr[b].length) {
                          status=false;
                          break;
                      }
                      if(status)maxLen=arr[a].length;
                  }
              }
              //END #MAX LENGTH
              
              //START #SUM JAGGED ARRAY 
              int [ ] arr1=new int[maxLen];
              for(var a=0;a<maxLen;a++) {
                  sum=0;
                  for(var b=0;b<arr.length;b++) {
                      if(arr[b].length>a)sum+=arr[b][a];
                  }
                  arr1[a]=sum; //Adding values to the the return array index
              }
              //END #SUM JAGGED ARRAY 
              
              
              return arr1;
          }
          public static void main ( String [ ] args ) {
              int [][]arr= {{1},{1,3},{1,2,3,4},{1,2,3,4,5,6,7}};
              for(int x:new JaggedArrayColSum().jackedArrayColSum ( arr ))System.out.print ( x +" " ) ;
          }
      }
      

      【讨论】:

      • 请记住,Stack Overflow 不仅仅是为了解决眼前的问题,而是为了帮助未来的读者找到类似问题的解决方案,这需要了解底层代码。这对于我们社区的初学者和不熟悉语法的成员来说尤其重要。鉴于此,您能否edit 您的答案包括对您正在做什么的解释以及为什么您认为这是最好的方法?
      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2018-05-24
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多