给定一个多维整数数组,如何找到所有基本元素的总和?每个数组中可能具有不同数量的数组,因此我的算法必须灵活以适应所有可能的输入。递归方法似乎是最优雅的解决方案。例:
鉴于:
array = {
{{1,2,3},
{4,5},
{6,7,8}},
{{9},{10}}
}
返回: 55
请注意,每个子数组的长度不一致且各不相同,数组的深度也是如此。这意味着传统的循环将无法检查数组的长度,递归方法将无法将循环的维数定义为初始参数。也许递归循环需要将Object
转换为数组?
编辑:
该方法还应该能够对任意维数的数组求和。例如,输入数组可以有三个维度,甚至7个维度。
不使用streams或lambdas的另一种可能性是编写一个简单的递归方法。就像这种性质的其他冲突一样,类型冲突只会在运行时出现。
对于以下嵌套数组结构:
Integer[][][][] array = { { { { 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.println(sum(array));
public static int sum(Object[] a) {
int sum = 0;
for (Object o : a) {
if (o instanceof Object[]) {
sum += sum((Object[]) o);
}
if (o instanceof Integer) {
sum += (Integer) o;
}
}
return sum;
}
打印
307
使用Java流,你可以只使用这个(假设你的数组有2个维度):
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));
}
您还可以使用o instanceof Object[]
代替o.getClass()。isArray()
但对于我的测试,第二个测试的性能更好。
像这样使用此方法:
Integer[][][] array = {{{1, 2, 3}, {4, 5}, {6, 7, 8}}, {{9}, {10}}};
int sum = flatMapDynamicArray(array)
.mapToInt(i -> (int) i)
.sum();
对于您共享的阵列,在所有情况下的结果都是55
。
有没有一种方法可以让你使用打印给定数组中的元素? 所以输出将是 或者 或
问题内容: 我有一个字符串数组: 我从中得到随机元素: 现在我想获得当我按下按钮以获取随机水果时苹果所处的数字,例如当我按下randon按钮时,它给了我Banana ..并且还应该给我那个元素编号是 我得到了元素,但是获取元素编号有问题,所以请帮帮我 问题答案: 只需将生成的索引存储在变量中,然后使用此变量访问数组: PS我通常不喜欢每次随机化生成新对象-我更喜欢在程序中使用单个对象- 然后重新使
问题内容: 我有一个像这样的数组: 我想从该数组中获取3个随机元素。我来自C#,但是我不确定该从哪里开始。我想我应该先对数组进行随机排序,然后再从中选择前3个项目? 我尝试使用以下扩展名将其改组: 但随后在“ shuffle()”的位置说“’()’不可转换为’[Int]’”。 为了挑选一些元素,我使用: 到目前为止看起来还不错。 如何洗牌?还是有人对此有更好/更优雅的解决方案? 问题答案: Xco
嗨,伙计们,我有这个阵列,可以打印5x5 1 我想做的是随机地将这些1中的三(3)个设为0。实例 我该怎么做?提前感谢您!
我试图编写一个方法rollDice(int number,int nSides),它返回用nSides边滚动数字骰子的总结果。
下面是一个java类CreateDoc,它从一个作为生产者端的web服务发送到另一个作为消费者端的web服务,其内容类型为:json 下面是类表示 一旦我在消费者端接收到作为json的列表,我就不能将其用作java对象,并且内容类型是数组,其中json嵌套在数组中。 以下是代表: 问题是如何处理这一点,并能够使用数据和表示为列表。