Java 查找多个输入数组的和

Java 查找多个输入数组的和,java,arrays,multidimensional-array,java.util.scanner,Java,Arrays,Multidimensional Array,Java.util.scanner,我正在寻找多个数组的总和,并搜索了各种代码和程序,但似乎没有一个对我有效,或者应该说没有一个真正让我的大脑根据我所看到的创建代码“我想做的是将3个输入的成绩数组相加,然后除以3得到平均值的数组。” 包活动; 导入java.util.*; 公共类测试代码{ 静态扫描仪sc=新扫描仪(System.in); 静态int indexMax=3; 公共静态void main(字符串[]args){ 字符串InfoName[][]=新字符串[indexMax][2]; Double InfoGrade[]

我正在寻找多个数组的总和,并搜索了各种代码和程序,但似乎没有一个对我有效,或者应该说没有一个真正让我的大脑根据我所看到的创建代码“我想做的是将3个输入的成绩数组相加,然后除以3得到平均值的数组。”

包活动;
导入java.util.*;
公共类测试代码{
静态扫描仪sc=新扫描仪(System.in);
静态int indexMax=3;
公共静态void main(字符串[]args){
字符串InfoName[][]=新字符串[indexMax][2];
Double InfoGrade[][]=新的Double[indexMax][3];
InputFoName(信息名称);
输入级(信息级);
PrintInfo(InfoName,ComputeAvg);
}
公共静态字符串[][]InputInfo名称(字符串名称Arr[][]{
对于(int i=0;i
旁注就我个人而言,我将用原语类型
Double
替换
Double
对象,这主要是因为(除了性能)可读性,而且代码中并不真正需要

创建将按数组保留平均值的数组:

Double AddAvg[] = new Double[indexMax];
迭代数组并使用Java streams获得这些数组的平均值:

  Arrays.stream(ComputeArr[i])
        .mapToDouble(Double::doubleValue)
        .average()
        .orElse(0);
完整方法:

   public static Double[] ComputeAvg(Double[][] ComputeArr) {
        Double[] AddAvg = new Double[indexMax];

        for (int i = 0; i < indexMax; i++) {
            AddAvg[i] =  Arrays.stream(ComputeArr[i])
                                .mapToDouble(Double::doubleValue)
                                .average()
                                .orElse(0);
        }
        return AddAvg;
    }

旁注就我个人而言,我将用原语类型
Double
替换
Double
对象的使用,主要是因为(除了性能)可读性,并且在代码中并不真正需要

创建将按数组保留平均值的数组:

Double AddAvg[] = new Double[indexMax];
迭代数组并使用Java streams获得这些数组的平均值:

  Arrays.stream(ComputeArr[i])
        .mapToDouble(Double::doubleValue)
        .average()
        .orElse(0);
完整方法:

   public static Double[] ComputeAvg(Double[][] ComputeArr) {
        Double[] AddAvg = new Double[indexMax];

        for (int i = 0; i < indexMax; i++) {
            AddAvg[i] =  Arrays.stream(ComputeArr[i])
                                .mapToDouble(Double::doubleValue)
                                .average()
                                .orElse(0);
        }
        return AddAvg;
    }

如果可以使用流API,可以使用以下公式计算2D双数组的平均值:

static Double[]calcAvg(Double[]arr){
返回数组
.stream(arr)//流
.map(内部->数组.stream(内部)//流
.mapToDouble(Double::doubleValue)//转换为原语Double
.average()//计算为可选双精度的平均值
.orElse(0.0)//如果是空数组
)
.toArray(双[]::新);
}
此外,还可用于使其更不冗长:

static Double[]calcAvg(Double[]arr){
返回数组
.stream(arr)//流
.map(内部->数组.stream(内部)
.collect(Collectors.averagingDouble(Double::doubleValue))//或x->x
)
.toArray(双[]::新);
}
测验

Double[]arr={
{},
{0.1},
{1.0, 2.0, 3.0},
{4.0, 5.0, 6.0, 7.0, 8.0},
{5.0, 11.0, 17.0, 23.0, 29.0, 35.0},
};
System.out.println(Arrays.toString(calcAvg(新的双精度[0][]));
System.out.println(Arrays.toString(calavg(arr));
输出:

[]
[0.0, 0.1, 2.0, 6.0, 20.0]

如果可以使用流API,可以使用以下公式计算2D双数组的平均值:

static Double[]calcAvg(Double[]arr){
返回数组
.stream(arr)//流
.map(内部->数组.stream(内部)//流
.mapToDouble(Double::doubleValue)//转换为原语Double
.average()//计算为可选双精度的平均值
.orElse(0.0)//如果是空数组
)
.toArray(双[]::新);
}
此外,还可用于使其更不冗长:

static Double[]calcAvg(Double[]arr){
返回数组
.stream(arr)//流
.map(内部->数组.stream(内部)
.collect(Collectors.averagingDouble(Double::doubleValue))//或x->x
)
.toArray(双[]::新);
}
测验

Double[]arr={
{},
{0.1},
{1.0, 2.0, 3.0},
{4.0, 5.0, 6.0, 7.0, 8.0},
{5.0, 11.0, 17.0, 23.0, 29.0, 35.0},
};
System.out.println(Arrays.toString(calcAvg(新的双精度[0][]));
System.out.println(Arrays.toString(calavg(arr));
输出:

[]
[0.0, 0.1, 2.0, 6.0, 20.0]