我的代码中有一个方法,它接受一个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);
答案 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。