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的大小可以通过添加元素轻松更改,但我敢肯定这是一个数组,我敢肯定你错了:)--除非它是通过复制完成的,在另一篇文章中也有一个例子。