在2维阵列列的总和(sum of columns in a 2 dimensional array)

2019-07-18 04:12发布

static double [][] initialArray = {{7.432, 8.541, 23.398, 3.981}, {721.859, 6.9211, 29.7505, 53.6483}, {87.901, 455.72, 91.567, 57.988}};

public double[] columnSum(double [][] array){
    int index = 0;
    double temp[] = new double[array[index].length];

    for (int i = 0; i < array[i].length; i++){
        double sum = 0;

        for (int j = 0; j < array.length; j++){
            sum += array[j][i];

        }
        temp[index] = sum;
        System.out.println("Index is: " + index + " Sum is: "+sum);
        index++;

    }

    return temp;
}


public static void main(String[] args) {
    arrayq test = new arrayq();
    test.columnSum(initialArray);

}

我想获得的所有列的总和,但我不断收到outofbounds例外。 这是输出我得到:

Index is: 0 Sum is: 817.192
Index is: 1 Sum is: 471.18210000000005
Index is: 2 Sum is: 144.7155
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at NewExam.arrayq.columnSum(arrayq.java:11)

Answer 1:

您的循环条件外是给你的问题。 这是你的循环: -

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

现在,当i到达值3 ,您试图访问array[3].length 。 这将抛出你IndexOutOfBounds例外。


由于每个内部数组的大小相同,你可以改变你的循环到 : -

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

或者,甚至更好,只是存储array[0].length在手之前的一些变量。 但是,这不会有太大的差别。


我也建议你使用一个更好的方式来计算列的总和。 避免遍历排第一。 保持迭代一个正常的大概就是这个样子: -

public double[] columnSum(double [][] array){

    int size = array[0].length; // Replace it with the size of maximum length inner array
    double temp[] = new double[size];

    for (int i = 0; i < array.length; i++){
        for (int j = 0; j < array[i].length; j++){
            temp[j] += array[i][j];  // Note that, I am adding to `temp[j]`.
        }
    }

    System.out.println(Arrays.toString(temp));
    return temp;  // Note you are not using this return value in the calling method
}

所以,你可以看到你的问题是如何高度简化。 我做了什么,而不是分配值到阵列中,我添加的新值array[i][j]以现有价值temp[j] 于是,渐渐地,值array[i][j]对于所有i's (rows)被归纳起来temp[j] 这样,您就不必使用混乱的迭代。 所以,只要上面的代码添加到您的方法,并删除旧的。

这种方法也将正常工作,即使你有jagged-array ,也就是说,你内心数组的大小不同。 但是,只记得来定义的大小temp仔细阵列。

还要注意的是,我已经使用Arrays.toString(temp)方法来打印该阵列。



Answer 2:

对(INT I = 0;我<阵列[I]。长度;我++)

for(int i=0;i<size;i++)

isize绝不能在循环变化



Answer 3:

很近。 问题是,你正在使用array[i].length在你的for循环。 我从改成了array[i].lengtharray[0].length和你的问题了。 您需要j有,但你实际上并没有它。

你可以做这样的事情,虽然没有真正的任何一点,如果你知道你将如何让你的阵列。 不同大小的名单仍然会打破尽管计算总和的代码,你必须改变这一点。

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

这是你要修改的程序。

public class Main {
  static double[][] initialArray = { { 7.432, 8.541, 23.398, 3.981 }, { 721.859, 6.9211, 29.7505, 53.6483 }, { 87.901, 455.72, 91.567, 57.988 } };

  public double[] columnSum(double[][] array) {
    int index = 0;
    double temp[] = new double[array[index].length];
    for (int i = 0; i < array[0].length; i++) {
      double sum = 0;
      for (int j = 0; j < array.length; j++) {
        sum += array[j][i];
      }
      temp[index] = sum;
      System.out.println("Index is: " + index + " Sum is: " + sum);
      index++;
    }
    return temp;
  }

  public static void main(String[] args) {
    new Main().columnSum(initialArray);
  }
}


Answer 4:

索引= 3,i是还与3个相等的,你必须阵列[I]。长度代码中的,但有阵列3项这样就可以获得在阵列[3]。长度表达异常

试试吧

public double[] columnSum(double [][] array){
    double temp[] = new double[array[0].length];

    for (int i = 0; i < array[0].length; i++){
        double sum = 0;

        for (int j = 0; j < array.length; j++){
            sum += array[j][i];

        }
        temp[i] = sum;
        System.out.println("Index is: " + i + " Sum is: "+sum);

    }

    return temp;
}


文章来源: sum of columns in a 2 dimensional array
标签: java arrays add