如何改变二维阵列的大小

时间:2014-05-10 23:11:05

标签: arrays processing multidimensional-array

是否可以在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];

有人可以解释一下吗?

2 个答案:

答案 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}}