Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中随机嵌套数组的基元素之和?_Java_Arrays_Sum - Fatal编程技术网

Java中随机嵌套数组的基元素之和?

Java中随机嵌套数组的基元素之和?,java,arrays,sum,Java,Arrays,Sum,给定一个多维整数数组,如何找到所有基元素的和?每个数组中可能有不同数量的数组,因此我的算法必须灵活,以适应所有可能的输入。递归方法似乎是最优雅的解决方案。例如: 鉴于: 返回: 五十五 请注意,每个子数组的长度不一致,并且各不相同,数组的深度也不同。这意味着传统循环将无法检查数组的长度,递归方法将无法将循环的维数定义为初始参数。也许递归循环需要将对象强制转换为数组 编辑: 该方法还应该能够对任意维数的数组求和。例如,输入数组可以有三个维度,甚至是7个维度。使用Java Streams,如果数组有

给定一个多维整数数组,如何找到所有基元素的和?每个数组中可能有不同数量的数组,因此我的算法必须灵活,以适应所有可能的输入。递归方法似乎是最优雅的解决方案。例如:

鉴于:

返回: 五十五

请注意,每个子数组的长度不一致,并且各不相同,数组的深度也不同。这意味着传统循环将无法检查数组的长度,递归方法将无法将循环的维数定义为初始参数。也许递归循环需要将对象强制转换为数组

编辑:


该方法还应该能够对任意维数的数组求和。例如,输入数组可以有三个维度,甚至是7个维度。

使用Java Streams,如果数组有两个维度,那么您可以使用它:

int[][] array = {{1, 2, 3}, {4, 5}, {6, 7, 8}, {9, 10}};
int sum = Arrays.stream(array)
        .flatMapToInt(Arrays::stream)
        .sum();
如果阵列有3个维度,则可以将其扩展到以下维度:

int[][][] array = {{{1, 2, 3}, {4, 5}, {6, 7, 8}}, {{9}, {10}}};
int sum = Arrays.stream(array)
        .flatMap(Arrays::stream)
        .flatMapToInt(Arrays::stream)
        .sum();
要处理深度未知的阵列,可以使用此方法展平它们:

private static Stream<Object> flatMapDynamicArray(Object[] array) {
    return Arrays.stream(array)
            .flatMap(o -> o.getClass().isArray() ? 
                    flatMapDynamicArray((Object[]) o) : 
                    Stream.of(o));
}

对于您共享的数组,所有情况下的结果都是55。

另一种不使用streams或lambda的可能性是编写一个简单的递归方法。就像其他这种性质的冲突一样,类型冲突只会在运行时表现出来

对于以下嵌套数组结构:

整数[][]数组={{{{{1,2,3 }, { 4, 5, 6 }, { 7, 8, 9 } }, { { 10, 11, 12, }, { 13, 14, 15 }, { 16, 17, 19 } } }, { { { 20, 21, 22 }, { 23, 24, 25 } } } }; System.out.printlnsumarray; 公共静态int sumObject[]a{ 整数和=0; 对象o:a{ 如果对象[]的实例为o{ sum+=sumObject[]o; } 如果o instanceof Integer{ 总和+=整数o; } } 回报金额; } 印刷品

307


提供您对上述给定输入的期望输出如果您不知道父数组将具有的维度数怎么办?因此您有一个对象作为输入?是的,如果必要,对象将是输入。@FrankFanelli我编辑了我的问题。希望它有助于处理深度未知的数组。我们可以使用o.getClass.isArray而不是对象[]的o instanceof。
private static Stream<Object> flatMapDynamicArray(Object[] array) {
    return Arrays.stream(array)
            .flatMap(o -> o.getClass().isArray() ? 
                    flatMapDynamicArray((Object[]) o) : 
                    Stream.of(o));
}
Integer[][][] array = {{{1, 2, 3}, {4, 5}, {6, 7, 8}}, {{9}, {10}}};
int sum = flatMapDynamicArray(array)
        .mapToInt(i -> (int) i)
        .sum();