Java 克隆有限的多维空间
我有这个:Java 克隆有限的多维空间,java,arrays,Java,Arrays,我有这个: String[][] numbers = { {"one", "two", "three"}, {"four", "five", "six"}, {"seven", "eight", "nine"} } String[][] tmp; 我现在要做的是将数字克隆到tmp中,但限制为每行2个参数。我不想初始化任何大小 tmp的输出: { {"one", "two"}, {"four", "five"},
String[][] numbers = {
{"one", "two", "three"},
{"four", "five", "six"},
{"seven", "eight", "nine"}
}
String[][] tmp;
我现在要做的是将数字克隆到tmp中,但限制为每行2个参数。我不想初始化任何大小 tmp的输出:
{
{"one", "two"},
{"four", "five"},
{"seven", "eight"}
}
我尝试的是:
String[][] cloneArray(String[][] elements) {
int length = elements.length;
String[][] target = new String[length][2];
for (int i = 0; i < length; i++) {
System.arraycopy(elements[i], 0, target[i], 0, elements[i].length);
}
return target;
}
我得到
java.lang.ArrayIndexOutOfBoundsException
您对System.arraycopy()
使用了错误的语法。方法的声明如下所示:
公共静态void数组副本(对象src、int-srcPos、对象dest、int-destPos、int-length)
其中,src
和dest
分别是源数组和目标数组。arraycopy
函数本身处理从srcPos
到srcPos+length
的位置,并将其从destPos
复制到destPos+length
。因此,无需遍历元素并对每个元素使用arraycopy()
因此,对于您的代码,修复将是:
String[][] cloneArray(String[][] elements) {
int length = elements.length;
String[][] target = new String[length][2];
System.arraycopy(elements, 0, target, 0, elements.length);
return target;
}
如果您不想使用arraycopy
而是想循环元素并手动复制元素,您也可以简单地执行以下操作:
String[][] cloneArray(String[][] elements) {
int length = elements.length;
String[][] target = new String[length][2];
for (int i = 0; i < length; i++) {
for (int j = 0; j < 2; j++) {
target[i][j] = elements[i][j];
}
}
return target;
}
String[]]cloneArray(String[]]elements){
int length=elements.length;
字符串[][]目标=新字符串[长度][2];
for(int i=0;i
我们可以通过从第二个元素中获取流
并在其上应用流#映射
来过滤出第二个元素之外的内部数组,以便新内部数组的大小限制为2个元素:
String[][] numbers = {
{"one", "two", "three"},
{"four", "five", "six"},
{"seven", "eight", "nine"}
};
String[][] tmp = Arrays.stream(numbers)
.map(arr -> (arr != null && arr.length > 2)
? Arrays.copyOf(arr, 2)
: arr)
.toArray(String[][]::new);
System.out.println(Arrays.deepToString(tmp));
输出:
[[one, two], [four, five], [seven, eight]]
“我不想初始化任何大小”-为什么不?您必须定义目标数组的大小(即限制为
2个元素)。您的问题是什么?特别是:您当前的解决方案有什么问题?因为我有另一个功能,每次按下按钮时都会添加元素…因此我需要一个无限数组…我将编辑posti get java.lang.ArrayIndexOutOfBoundsException使用您的解决方案我不再获得java.lang.ArrayIndexOutOfBoundsException,但它不起作用…我有一个非常奇怪的想法output@RaylessTiKi请查看我的最新编辑,这应该有用。@RaylessTiKi很高兴它有用,如果你愿意,请接受我的回答。
[[one, two], [four, five], [seven, eight]]