当前位置: 首页 > 面试题库 >

二维数组中的列总和

陆浩博
2023-03-14
问题内容
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);

}

我想获取所有列的总和,但是我不断收到出站异常。这是我得到的输出:

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)

问题答案:

您的外部for循环条件给您带来了问题。这是您的循环:-

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)方法打印数组。



 类似资料:
  • 问题内容: 我正在一个项目中,我必须读取文件并将内容输入2D数组。然后,我必须对每一行,每一列和矩阵的周长求和。到目前为止,除外围功能外,我一切正常。我正在尝试为两个外部列的顶行,底行和中间创建单独的for循环。 矩阵文件如下所示: 因此,周长总计应为42。现在,我可以成功地将第一行和最后一行添加为等于22。但是,当我将列添加到总数中时,我得到32。 这是代码: 如果有人可以帮助我将第一列和最后一

  • 本文向大家介绍详解C++中的一维数组和二维数组,包括了详解C++中的一维数组和二维数组的使用技巧和注意事项,需要的朋友参考一下 C++一维数组 定义一维数组 定义一维数组的一般格式为:     类型标识符  数组名[常量表达式]; 例如: 它表示数组名为a,此数组为整型,有10个元素。 关于一维数组的几点说明: 1) 数组名定名规则和变量名相同,遵循标识符定名规则。 2) 用方括号括起来的常量表达

  • 问题内容: 我对Swift中的2D数组感到非常困惑。让我逐步描述。如果我错了,请您纠正我。 首先; 空数组的声明: 其次,填充数组。(例如,i,j是for循环变量) 最后,在数组中编辑元素 问题答案: 定义可变数组 要么: 或者,如果您需要一个预定义大小的数组(如@ 0x7fffffff在评论中所述): 在位置更改元素 要么 更改子数组 要么 要么 如果在进行这些更改之前,您有3x2的数组,数组中

  • 问题内容: 我想知道如何在Python中声明一个二维数组。 前两个任务工作正常。但是当我尝试做时,出现以下错误: 我在尝试声明二维数组时做任何愚蠢的事情吗? 编辑: 但是我不知道数组(行和列)中的元素数量。 问题答案: 您不会在Python中“声明”数组或其他任何东西。您只需分配一个(新)变量。如果要使用多维数组,只需添加一个新数组作为数组元素。 要么

  • 当要把一个二维数组中各个数组的和加起来的时候,我已经黔驴技穷了。例如: 函数sumArray可以成功累加 我需要它能够返回另一个数组中有多少数组的总和。原因是因为我需要下一个函数来调用sumArray(): 理论上,sumSort()将根据每个数组中数字的总和对数组进行排序(从最高到最低)。 任何提示都会很棒。提前谢谢你!

  • 我正在编写一个计算和绘制抛物线的小程序。但我在程序中有一小部分需要计算valuetable。 二次函数如下: