方法在java中用数组返回类型改变数组长度

时间:2016-04-01 21:29:37

标签: java arrays

我的代码中有一个方法,它接受一个array并返回一个更大的数组 我如何在非静态数组上使用此方法? 我很困惑,因为我认为数组总是有一个特定的长度,只是制作我的数组,从方法返回的那个,使用“=”符号指向一个内存位置不能这样做...
如果您向我介绍一些使用数组的方法示例,我将不胜感激。

public static int[] shift (int []A, final int n)
{
    int []temp;
    temp = new int[A.length];
    temp = A;
    A = new int[A.length+n];
    System.arraycopy(temp, 0, A, 0, A.length);

    for (int i=1; i<=n; i++){
    A[A.length+i] = 0;}

    return A;
} 

这是一个方法,例如,在另一个方法中,我想创建一个数组来使用返回的数组。

int []B = new int[1];
B[0]=1;
int []C = new int[n];

C = shift(B,10);

3 个答案:

答案 0 :(得分:0)

java中的默认数组是静态的,你无论如何都无法改变这种行为。但是,util包扩展List类中有许多类可用于动态数组。其中一个是ArrayLis,正如@JoseCifuentes所说。

答案 1 :(得分:0)

您无法更改数组的大小。您只能重新分配参考:

int[] arr = new int[5];
// 'arr' is reference to a new array size 5, in the free store.

arr = new int[10];
// 'arr' is reference to a new array size 10, in the free store. First array is deallocated.

重新分配arr时会破坏第一个数组及其所有内容。

但是,java API有一个方法来创建一个指定长度的新数组并复制旧的所有元素:Arrays.copOf

您可以像这样使用它:

int[] arr = new int[5];
arr = Arrays.copyOf(arr, 10); // new size is 10

请注意copyOf可以使用null截断数组或填充(如果0,则int。请参阅documentation

答案 2 :(得分:0)

您在发布此处之前检查了此代码吗?

 for (int i=1; i<=n; i++){
A[A.length+i] = 0;}

超出范围的例外。

让我们说A.length = 2且n = 2。那么新的A长度是4。

接下来我们到达那个部分,那里你试图做A [A.length + i]当A.length等于4而i等于1你试图达到A [5]但A只得到4个细胞,0-3。