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

时间:2017-02-13 01:44:16

标签: java arrays

我在理解数组如何工作方面遇到了一些麻烦,特别是在没有给出特定大小的数组时。例如,如果我给了代码:

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

我想知道如何在方法中创建另一个数组,并在参数中使用相同数量的行和列(没有在参数中添加一些数值,然后只在新数组中写入相同的值。谢谢!)

2 个答案:

答案 0 :(得分:0)

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

这与ListMap等许多其他数据结构不同,这些数据结构是“智能”的,并且可以在需要时处理自己调整大小。

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

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