2015-06-21 29 views
3

看起來很奇怪爲什麼整數數組重置爲默認值。在使用foreach推送值之後,java整數數組重置爲默認值

int[] y = new int[5]; 
int z = 0; 

for(int j : y) { 
    j = z++; 
    System.out.print(j); //0 1 2 3 4 
} 

for(int j : y) { 
    System.out.print(j); //0 0 0 0 0 
} 
+0

您的整型數組是空白的所以當您將打印0因爲它的整數 – Pratik

+0

您的第一個循環實際上並不是寫入數組,因爲j是當前數組值的副本,而不是參考到它。您只需要在第一個循環中將j作爲參考:for(int&j:y) – qexyn

回答

3

Java是傳值:

如果要修改數組使用正常的循環。因此,當您更改包含數組元素值的局部變量j時,元素不會更改,只有局部變量。

要改變數組元素,你需要做的:

for (int j = 0; j < y.length; j++) { 
    y[j] = z++; 
    System.out.print(y[j]); // 0 1 2 3 4 
} 
+0

不客氣:) –

1

Ĵ將具有Y [k]的的內循環,但寫入它不會通過寫入陣列。

for(int i = 0; i < y.length; i++) { 
    y[i] = z++; 
    System.out.print(y[i]); //0 1 2 3 4 
} 
+0

非常感謝... –

1

您指定的值到j,其中包含從數組複製值,而不是引用。

你需要的是:

for (int i=0; i<y.length; i++) { 
    y[i] = z++; 
    System.out.println(y[i]); 
} 
1

您還沒有分配值,您需要將其分配給一個臨時變量j的整數數組。嘗試以下,將打印更新值

int[] y = new int[5]; 
int z = 0; 

for(int j =0 ;j< y.length ;j++) { 
    y[j] = z++; 
    System.out.print(y[j]); //0 1 2 3 4 
} 

for(int j : y) { 
    System.out.print(j); //0 1 2 3 4 
} 
+0

非常感謝... –

0

在第一個for循環中,打印的變量j中的值不是來自該數組的值,因爲您在打印之前分配了一個新值(從z)(j)...