JAVA:创建一个在参数中具有相同行数/列数的新数组



我在理解数组的工作原理时遇到了一些麻烦,特别是当数组没有被赋予特定大小时。例如,如果给我代码:

public int [][] someMethodHere(int [][] myNewArray) { 
//code here
} 

我想知道如何在方法中创建另一个数组,参数中的行数和列数相同(无需在参数中添加一些数值,然后在新数组中写入相同的值。谢谢!

数组具有您在创建数组时设置的固定大小。

这与许多其他数据结构(如ListMap(不同,后者是"智能"的,可以在需要时处理调整大小。

因此,当你创建一个数组时,你必须告诉编译器它有多大:

// 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;
}

相关内容

  • 没有找到相关文章

最新更新