所以我在java中遇到这个问题。该方法应该包含两个多维的String数组。该方法应该返回一个复制String数组。现在,这两个被发送到复制方法的数组将在数组中随机生成长度。我试图看看array2是否小于数组,如果是,那么数组将被赋予array2的长度,我想将数组中的元素复制到array2中。如果与array2大于数组相反,那么我想将数组中的元素复制到array2中,然后array2中的REMAINING点将填充*。现在的问题是我不断获得超出索引范围的运行时错误。具体来说,我用下面的双星号(for循环内)表示的线条给我带来了问题。我该怎么做才能解决这个问题。
public static String[][][] copy(String[][][] array, String[][][] array2){
if(array2.length < array.length){
array = new String[array2.length][array2.length][array2.length];
for(int i = 0; i < array2.length; i++){
for(int j = 0; j < array2[i].length; j++){
for(int k = 0; k < array2[i][j].length; k++){
**array2[i][j][k] = array[i][j][k];**
}
}
}
return array2;
}
if(array2.length > array.length){
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array[i].length; j++){
for(int k = 0; k < array[i][j].length; k++){
**array2[i][j][k] = array[i][j][k];**
}
}
}
for(int i = array.length - 1; i < array2.length; i++){
for(int j = array[i].length - 1; j < array2.length; j++){
for(int k = array[i][j].length - 1; k < array2.length; k++){
array2[i][j][k] = "*";
}
}
}
return array2;
}
return array;
}
答案 0 :(得分:0)
您假设数组的每个维度大小相同
但你甚至不能假设两个兄弟阵列的大小相同
我的意思是,array = new String[array2.length][array2.length][array2.length];
是无稽之谈,至少在两个方面
您可能希望拥有array2 = new String[array.length][][]
,因为如果您重新分配array
,则只需复制null
。对于其他维度的长度,您必须进行相同的比较和调整,特别是如果您未重新分配array2
。如果你这样做了,那么你必须重新创建子级数组。