我在理解数组的工作原理时遇到了一些麻烦,特别是当数组没有被赋予特定大小时。例如,如果给我代码:
public int [][] someMethodHere(int [][] myNewArray) {
//code here
}
我想知道如何在方法中创建另一个数组,参数中的行数和列数相同(无需在参数中添加一些数值,然后在新数组中写入相同的值。谢谢!
数组具有您在创建数组时设置的固定大小。
这与许多其他数据结构(如List
或Map
(不同,后者是"智能"的,可以在需要时处理调整大小。
因此,当你创建一个数组时,你必须告诉编译器它有多大:
// create the original array with 10 slots
int[] originalArray = new int[10];
如果要创建相同大小的新数组,可以使用Array
类型的 length
属性。
// create a new array of the same size as the original array
int[] newArray = new int[originalArray.length];
在二维数组的情况下,您可以这样做:
// create the original array
int[][] originalArray = new int[10][20];
// create a new array of the same size as the original array
int[][] newArray = new int[originalArray.length][originalArray[0].length];
请注意,在指定第二个维度的长度时,我得到原始数组中第一个元素的长度。只要所有行的长度相同,这就可以工作。
如果行的长度不同,您可以通过迭代数组的第一维来设置新数组中每一行的长度,如下所示:
// create a new array where the first dimension is the same size as the original array
int[][] newArray = new int[originalArray.length][];
// set the size of the 2nd dimension on a per row basis
for(int i = 0; i < originalArray.length; i++) {
newArray[i] = new int[originalArray[i].length];
}
您可以创建数组的副本并清除新数组。
public static int[][] someMethodHere(int[][] src) {
int length = src.length;
int[][] target = new int[length][src[0].length];
for (int i = 0; i < length; i++) {
System.arraycopy(src[i], 0, target[i], 0, src[i].length);
Arrays.fill(target[i], 0);
}
return target;
}