首页 > 解决方案 > 根据给定长度迭代地将数组拆分为子数组

问题描述

如何在 Java 中创建数组的子数组。给定一个数字 3 和 x [2,4,6,30,9],答案是X1[2,4,6] X2[4,6,30] X3[6,30,9]

这是我到目前为止所拥有的,但它只打印前三个元素。我还必须打印每个子数组的中位数。


double[] floatsArr = new double[3]; 

// floats is the array with all the elements in

for(int i = 0; i < floats.length; i++){
            
     for(int k = 1; k < (filterSize+1); k++){
                 floatsArr[k] = floats[k];  
                 System.out.println(floatsArr[k]);

    }
}

标签: javaarraysloops

解决方案


您似乎想从数组中创建给定长度的所有子数组。

您可以手动完成:

static double[][] subArrays(double[] arr, int k)
{
    double[][] subArrs = new double[arr.length-k+1][k];
    
    for(int i=0; i<subArrs.length; i++)
        for(int j=0; j<k; j++)
            subArrs[i][j] = arr[i+j];
    
    return subArrs;
}

或者使用内置方法Arrays.copyOfRange

static double[][] subArrays(double[] arr, int k)
{
    double[][] subArrs = new double[arr.length-k+1][];
    
    for(int i=0; i<subArrs.length; i++)
        subArrs[i] = Arrays.copyOfRange(arr, i, i+k);
    
    return subArrs;
}

测试:

double[] arr = {2, 4, 6, 30, 9};
    
for(double[] subArr : subArrays(arr, 3))
    System.out.println(Arrays.toString(subArr));

输出:

[2.0, 4.0, 6.0]
[4.0, 6.0, 30.0]
[6.0, 30.0, 9.0]

推荐阅读