我在理解数组如何工作方面遇到了一些麻烦,特别是在没有给出特定大小的数组时。例如,如果我给了代码:
public int [][] someMethodHere(int [][] myNewArray) {
//code here
}
我想知道如何在方法中创建另一个数组,并在参数中使用相同数量的行和列(没有在参数中添加一些数值,然后只在新数组中写入相同的值。谢谢!)
答案 0 :(得分:0)
数组具有您在创建数组时设置的固定大小。
这与List
或Map
等许多其他数据结构不同,这些数据结构是“智能”的,并且可以在需要时处理自己调整大小。
因此,在创建数组时,必须告诉编译器它有多大:
// create the original array with 10 slots
int[] originalArray = new int[10];
如果要创建相同大小的新数组,可以使用length
类型的Array
属性。
// 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];
}
答案 1 :(得分:-1)
您可以复制数组并清除新数组。
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;
}