你好!有一个简单的数组Object[] arr = new int[50],里面填充了一些值,还有另一个数组Object[][][][][] fiveDArr,虽然是5维的,但是你需要把第一个的所有值复制到一个5维数组中,这样就变成了:fiveDArr[arr][arr][arr][arr][arr]
I试过这个:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
for (int n = 0; n < 2; n++) {
for (int m = 0; m < 2; m++) {
System.arraycopy(arr, 0, fiveDArr[i][j][k][n][m], 0, 50);
}
}
}
}
}
不幸的是抓住了 NullPointerException。
为什么你们都知道这个,但让它变成这样:
但显然你的 5 维数组包含 2 的 5 次方,即 32 个元素,你需要 50 个。
事实证明,这项任务更加困难,并且位于组合学领域(来自一个数组的所有可能的唯一对象序列)。
我在 ru.SO.com 上的组合数学旁边找到了一个非常好的答案,其中包含公式、示例和代码。一切都在那里详细描述,我不会在这里重复理论。如果可以的话,我会添加代码,但稍后。
如果我错了,请纠正我,但从上面的帖子来看,50 个对象的所有可能组合 == 50 的阶乘 ==
30414093201713378043612608166064768844377641568960512000000000000那些。应该有 50 个嵌套循环,而不是 5 个。我的计算机设法在 256 MB 的 RAM 中容纳 150 万个对象,我什至无法说出上面的数字,更不用说想象需要多少内存 =)
对 5 个元素的数组(5 个嵌套循环)进行了实验。他只是收集的不是数组,而是指示元素索引的字符串,并将它们添加
Set到完全消除重复。到目前为止,我已经找到了唯一的解决方案(对于一个完全不熟悉组合学的人)。实际上,该解决方案使用了第 5 个数字系统,其中每个数字将指示原始数组中元素的编号。
完整的这段代码在链接 Ideone.com 下有一个输出。
此特定代码将遍历数组中的所有值并给出所有可能的唯一值。确实,我希望如此!但现在我遇到了性能问题