繁体   English   中英

查找作为变量 arguments (varargs) 参数传递的数组总和,然后将结果作为数组返回 Java

[英]Find Sum of array passed as variable arguments (varargs) parameter then return result as an array in Java

  1. 需要将数组作为变量传递 arguments (varargs) ==> 考虑
double[] array_1 = {1.1, 3.3, 5.5, 7.7, 9.9, 11.11};
double[] array_2 = {2.222, 4.444, 6.666, 8.888, 10.100, 12.122};
double[] array_3 = {3.111, 3.222, 3.333, 3.444, 3.555, 3.666};
.
.
.

double[] array_n = {12.444, 12.888, 13.332, 13.776, 14.22, 14.664}
  1. 将 arrays 的所有 n 个数相加

sum_n_arrays = array_1 + array_2 +... + array_n

  1. 将结果作为一个最终数组返回 ==> sum_of_n_arrays = [x1, x2, x3, x4, x5, x6];

这是到目前为止的进展......

添加三个 arrays:

public double[] sumThreeArrays(double[] firstArray, double[] secondArray, double[] thirdArray) {
   // check all arrays are not null and of same length
   int length = (firstArray.length == secondArray.length && secondArray.length==thirdArray.length ) &&
                (firstArray.length >0 && secondArray.length >0 && thirdArray.length >0)
                ? firstArray.length : -1;

   double[] result = new double[length];
   if (length > 0) {
            for (int i=0; i<length; i++) {
                result[i] = firstArray[i] + secondArray[i] + thirdArray[i];
            }
    }
    System.out.println("Sum of Three Arrays: " + Arrays.toString(result));
    return result;
    }

结果 ---> 三之和 Arrays: [6.433, 10.966, 15.499, 20.032, 23.555, 26.898]

对 function 执行相同的操作,将多个 n arrays 作为参数(可变参数),然后返回数组总和作为最终结果

public double[] SumMultipleArray(double[] ...arr) {
   //1. pass multiple arrays using var args --> spread operator

   //2. check length of each array is same and not NULL

  //3. Sum all multiple arrays
        ```
        public double[] sumVarArg(double[] ...arr) {
            int arrayLength;
            double[] result = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
            int argsCount = arr.length; // number of arguments passed as an array     

        for (double[] d: arr) {
            arrayLength = d.length; // number of element in each array

            for (int i=0; i<arrayLength; i++) {
                result[i] += d[i];
            }

        }
        return result;
    }
        ```





  //4. TO DO (Thinking of using stream and filter but not quite done...)
  TO DO

}

谢谢

public class TryMe {
public static void main(String[] args){

    double[][] arrayToPutInFunction = new double[4][6];
    for(int i = 0; i < arrayToPutInFunction.length; i++){
        for(int j = 0; j < arrayToPutInFunction[i].length; j++){
            arrayToPutInFunction[i][j] = j;
        }
    }

    double[] result = multipleArraysSum(arrayToPutInFunction);

    System.out.println("First cell: " + result[0] + " Second cell: " +  result[1] + 
             " Third cell: " + result[2] + " Fourth cell: " +result[3]
              + " Fifth cell: " + result[4] + " Sixth cell: " + result[5]);
    }

    public static double[] multipleArraysSum(double[][] twoDimensionalArray) {
        // check all arrays are not null and of same length
        int allArraysmustHaveThisLength = twoDimensionalArray[0].length;
        double[] resultArray = new double[allArraysmustHaveThisLength];
        for(int i = 0; i < twoDimensionalArray.length; i++){
            for(int j = 0; j < twoDimensionalArray[i].length; j++){
                if(twoDimensionalArray[i].length == allArraysmustHaveThisLength){
                    resultArray[j] += twoDimensionalArray[i][j];
                } else {
                    break;
                }
            }
        }
        return resultArray;
    }
}

如果你真的想添加一个未知数 arrays,我建议使用二维数组。 通过这种方式,您可以用您拥有的数字填充二维数组并将其插入到 multipleArraysSum-Function 中,以将每个单元格添加到您将获得的最终一维数组中。

编辑:

arrayToPutInFunction 只是用数字填充二维数组。 当您尝试代码时,您会看到结果数组恰好包含 6 个单元格。 当 arrays 中的一个与第一个数组的长度不同时,它将中断并停止。

我想这就是你想要做的:

import java.util.Arrays;

/**
 *
 * @author sowrov
 */
public class Main {
    static double[] SumMultipleArray(double[] ...arr) {
        double [] res = new double[arr.length];
        int i=0;
        for (double[] d: arr) {
            double sum=0;
            if (d!=null) { //Null check
                for (double v: d) {
                    sum += v;
                }
            }

            res[i++] = sum;
        }
        return res;
    }

    public static void main(String[] args) {
        double[] array_1 = {1.1, 3.3, 5.5, 7.7, 9.9, 11.11};
        double[] array_2 = {2.222, 4.444, 6.666, 8.888, 10.100, 12.122};
        double[] array_3 = {3.111, 3.222, 3.333, 3.444, 3.555, 3.666};
        double[] array_4 = {};
        double[] array_5 = null;
        double[] array_n = {12.444, 12.888, 13.332, 13.776, 14.22, 14.664};


        double[] res = SumMultipleArray(array_1, array_2, array_3, array_4, array_5, array_n);

        System.out.println(Arrays.toString(res));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM