是否可以在Processing中更改二维数组的尺寸?
int m = 4;
int n = 6;
int [][] nums = new int[2][3]; //right now the array has 2 rows and 3 columns
//code that changes the dimensions of the array to m x n
//setting nums.length and nums[0].length to m and n doesn't work, I tried it already
println(nums.length); //should be 4
println(nums[0].length); //should be 6
以下是问题的精确副本:
修改第二维度 写下以下函数:
void setDim(int[][] x, int m) {}
这会将x的每一行中的列数更改为m。
编辑:我检查了答案,中间的代码是
for(int i = 0 ; i < x.length; i++) x[i] = new int[m];
有人可以解释一下吗?
答案 0 :(得分:3)
无法更改相同数组的大小。您可以做的最接近的事情是使用new
运算符和System.arraycopy()
旧数据或Arrays.copyOf()
创建新数据。
您也可以考虑使用List
而不是数组。可以更改List
的大小,这可能适合您的任务。
关于问题的第二部分:二维数组是一个长度的数组,比方说N,每个项目也是一个长度的数组。 x[i] = new int[m]
表示:
int
的新m
数组; x[i]
; 这基本相同 - 正在创建新阵列,不会修改大小。
答案 1 :(得分:1)
不,数组长度在创建时建立。创建后,它的长度是固定的。
但是,您可以使用[System.arraycopy()](http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy(java.lang.Object,int,java.lang.Object,int,int))之类的东西,但为了将它用于二维数组我写的此方法使用System.arraycopy()将一个数组复制到另一个具有相同元素顺序的数组:
public static void copy2dArray(Object src, Object dest){
copy(src, 0, 0, dest, 0, 0)
}
private static void copy(Object src, int iSrc, int jSrc, Object dest, int iDes, int jDest){
int min=Math.min(src[iSrc].length-jSrc, dest[iDes].length-jDest);
System.arraycopy(src[iSrc], jSrc, dest[iDes], jDes, min);
if(min == src[iSrc].length-jSrc){
iSrc++;
jSrc=0;
jDest=min;
if(iSrc == src.length)
return;
}
else{
iDest++;
jDest=0;
jSrc=min;
if(iDest == dest.length)
return;
}
copy(src, iSrc, jSrc, dest, iDest, jDest);
}
copy2dArray方法将采用二维数组并将第一个数据复制到第二个数组中,具有相同的元素顺序,
例如:如果此代码已执行。
int [][] src = {{1, 2},
{3, 4},
{5, 6}};
int [][] dest = new int [2][4];
copy2dArray(src, dest);
之前的代码将使 dest = {{1,2,3,4}, {5,6}}