2017-04-25 32 views
1

我明白,當我們說某事等於另一個數組時,我們本質上是用我們的新名稱指向數組。如果我們想複製一個數組,我們需要逐個元素或者我們需要使用一個方法/ java包。Java數組 - 複製vs編輯它們

public class puzzle { 
    public static void main(String[] args) { 
     int [] x= {1,2,4,6}; 
     double [] u= 3.0, 4.0, 5.0, 6.0,7.0}; 
     double [] v = {2.0, 4.0, 5.0}; 

     puzzle(u,v,x); //1 

     puzzle (v,u,x); //2 
    } 
    public static void puzzle(double [] first, double [] second, int [] third){ 
     double [] temp; 
     temp=first; 
     temp[2]=42.0; 
     **second= first;** 
     second[0]= 2.34; 
    } 
} 

我們希望看到什麼x的值,U,V是在此之後一直運行(U,V,X) 和(V,U,X)

第二個拼圖v只有長度爲3,包含2.34,4.0,42.0。爲什麼只有三個長而不是六個(2.34,4.0,42.0,6.0,7.0)

這是否與數組v只有三個長,因此是三個固定大小,並最終切斷其他號碼?
(我沒有選擇的名稱)

+0

請用正確的語法更新您的問題 – Oswald

+0

也許你正在期待通過引用行爲。 Java始終是按值傳遞的。當示例代碼顯示'second = first'時,這只是改變局部變量。主要的變量'u'和'v'不會被該賦值改變。 http://stackoverflow.com/q/40480/2891664 – Radiodef

回答

1

要通過的array1每個元素複製,你必須循環數組,放入array2

int[] array1=new int[]{1,2,3,4,5}; 
int[] array2=new int[5]; 
for(int i=0;i<array2.length;i++){ 
    array2[i]=array1[i]; 
} 

以及編輯陣列您在指定索引提出了新的價值:

array1[2]=9; 
+1

您也可以使用'arr.clone()'或'Arrays.copyOf(arr,arr.length)'來複制一個沒有循環的數組。 – Radiodef

1

temp [2]和first [2]之間沒有區別:temp和first指向同一個數組。

0

我想我理解你的問題(如果不忽略這個答案)。你必須在這裏理解的是,當第一次執行拼圖函數時,你做了second = first。之後執行秒將指向與第一個相同。但是這對u和v沒有任何影響,他們會一直指向與之前相同的位置。當難題第二次執行時,同樣的重複。

以下圖片可能會讓您更清晰。 *地址值只是一個假設。 當拼圖函數被調用,在第一次和剛過溫度=第一情況是這樣的enter image description here

剛過第二[0] = 2.34是enter image description here

當拼圖函數被調用的情況在第二時間,只是臨時=第一後的情況是這樣的enter image description here

剛過第二[0] = 2.34是enter image description here

位置其中u和v點永遠不會改變的情況。