我必须实现一个从随机生成器获取元素的数组。每当数组到达它的最后一个元素时,将调用方法 resize() 来增加数组的大小。在我的代码中,在调用 resize() 方法之前,一切都会发生,它不会对数组的大小产生任何影响。它应该增加数组的大小以允许输入更多元素。
for (int j=0; j<arr.length-1; j++) {
random= generator.nextInt(arr.length*4) ;
arr[j]=random;
}
if(arr_size==arr.length){
resize(arr);
for (int h=0; h<(arr.length-1)*2; h++) {
random= generator.nextInt(arr.length*4) ;
arr[h]=random;}
}
这里是调整大小():
private static void resize(int[] arr) {
int[] tmp = new int[2*arr.length];
System.arraycopy(arr,0,tmp,0,arr.length);
arr = tmp;
}
最佳答案
设置 arr = tmp
并不像您想象的那样。您只需将 resize()
方法中的局部变量 arr
指向局部变量 tmp
。您要做的是返回 tmp
并将其分配给方法之外的 arr
。
if(arr_size==arr.length){
arr = resize(arr);
并将 resize()
方法签名更改为
private static int[] resize(int[] arr) {
//Resize
return tmp;
}
要注意的关键是:在 Java 中将对象引用传递给方法时,您传递的是该对象引用的副本,可以将其视为该对象在内存中位置的副本.在被调用方法中对 this REFERENCE 的所有此类操作都不会在该方法之外生效。但是,您可以操纵实际对象本身,因为正如我所说,引用指向内存中具有完全相同对象的相同位置。
但是将内存中某个位置的副本更改为指向内存中的新位置不会导致原始调用对象引用指向同一位置
关于java - 如何将数组的大小加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252450/