Arrays 如何更改二维数组的大小

Arrays 如何更改二维数组的大小,arrays,processing,multidimensional-array,Arrays,Processing,Multidimensional Array,是否可以在处理过程中更改二维数组的维数 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 tri

是否可以在处理过程中更改二维数组的维数

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];
for(int i=0;i

有人能解释一下吗?

无法更改相同的数组的大小。您可以做的最接近的事情是使用
new
操作符和
System.arraycopy()
从旧的数据创建一个新的,或者使用
Arrays.copyOf()

你也可以考虑使用<代码>列表>代码>代替数组。

列表的大小可以根据您的任务进行更改

关于问题的第二部分:二维数组是一个长度数组,比如说N,其中的每一项也是一个长度数组<代码>x[i]=新的整数[m]
表示:

  • 创建新的
    int
    大小为
    m
    的数组
  • 将对它的引用设置为
    x[i]

这本质上是相同的-正在创建的新数组,大小不可修改。

无法更改相同
数组的大小。您可以做的最接近的事情是使用
new
操作符和
System.arraycopy()
从旧的数据创建一个新的,或者使用
Arrays.copyOf()

你也可以考虑使用<代码>列表>代码>代替数组。

列表的大小可以根据您的任务进行更改

关于问题的第二部分:二维数组是一个长度数组,比如说N,其中的每一项也是一个长度数组<代码>x[i]=新的整数[m]
表示:

  • 创建新的
    int
    大小为
    m
    的数组
  • 将对它的引用设置为
    x[i]

这基本上是相同的-正在创建的新数组,大小不会修改。

否,数组长度是在创建时确定的。创建后,其长度是固定的

但是,您可以使用类似于[System.arraycopy()](,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}

否,数组长度是在创建时确定的。创建后,其长度是固定的

但是,您可以使用类似于[System.arraycopy()](,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}

不,那是不可能的。一种方法是使用列表类型,您可以在其中附加内容。就数组而言,处理是普通的Java,所以这似乎很有帮助:我很确定这是可能的,因为我在处理课上做了一个测验,其中一个问题是将数组的维数更改为mxn,但我没有理解。当显示答案时,我没有仔细查看它们以了解如何操作。也许你把它与ArrayList混淆了,请参阅其他Q&a,其中有关于这方面的大量信息。我知道ArrayList的大小可以通过添加元素轻松更改,但我很确定这是一个数组。我很确定你错了:)--除非它是通过复制完成的,在另一篇文章中也有一个例子。不,那是不可能的。一种方法是使用列表类型,您可以在其中附加内容。就数组而言,处理是普通的Java,所以这似乎很有帮助:我很确定这是可能的,因为我在处理课上做了一个测验,其中一个问题是将数组的维数更改为mxn,但我没有理解。当显示答案时,我没有仔细查看它们以了解如何操作。也许你把它与ArrayList混淆了,请参阅其他Q&a,其中有关于这方面的大量信息。我知道ArrayList的大小可以通过添加元素轻松更改,但我敢肯定这是一个数组,我敢肯定你错了:)--除非它是通过复制完成的,在另一篇文章中也有一个例子。