2013-08-17 17 views
4

我很難在數組中重新賦值。在數組中重新賦值的簡單方法

public static void main(String[] { 

      int[] arrayOfIntegers = new int[4]; 
      arrayOfIntegers[0] = 11; 
      arrayOfIntegers[1] = 12; 
      arrayOfIntegers[2] = 13; 
      arrayOfIntegers[3] = 14; 

      arrayOfIntegers = {11,12,15,17}; 

    } 

爲什麼我不能以我嘗試過的方式重新賦值?如果我做不到,爲什麼我不能這樣做?

+1

有點偏題:你應該命名變量'arrayOfIntegers'(開始未加數據)。另見http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367 – contradictioned

回答

5

爲什麼我無法重新分配,我已經嘗試的方式值?如果我做不到,爲什麼我不能這樣做?

因爲Java沒有解構賦值像一些其他語言一樣。

你的選擇是:

  1. 分配數組的數組變量如圖羅希特和Kayaman,但是這不是你問什麼。你說你想分配給元素。如果您將一個新陣列分配給ArrayOfIntegers,那麼在其他變量或成員中引用舊陣列的其他任何內容仍將引用舊陣列。

  2. 使用System.arraycopy,但它涉及創建一個臨時數組:

    System.arraycopy(new int[]{11,12,15,17}, 
           0, 
           ArrayOfIntegers, 
           0, 
           ArrayOfIntegers.length); 
    

    System.arraycopy將元素複製到現有陣列。

+0

我有一些簡單的問題,並希望確保我得到正確的答案。在回覆的第一部分中,當你說「其他任何引用舊數組的東西」時,你是在談論引用ArrayOfIntegers的子類?關於System.arraycopy如何工作,'ArrayOfIntegers'開頭爲[11,12,13,14]'。然後使用System.arraycopy創建一個臨時數組,替換原始'ArrayOfIntegers'中的元素?這與解構任務有何不同? –

+0

另外,什麼是「解構作業」?我認爲分配只是簡單地改變一個變量的值,而且由於它是第一次分配,所以作爲初始化的唯一「特殊」類型的分配。 –

+0

@TomFang:「解構賦值」是左手邊有一些複合變量,右手邊有複合值的地方,右手邊的每個值都分配給相應的部分左側變量。例如,在支持它們的語言中,你可以從字面上使用'int a; int b; (a,b)=(1,2);'結果'a'爲'1','b'爲'2'。右側的內容被「解構」爲單個部分,然後分配給左側標識的單個部分。這在右側是返回值時很有用。 –

4

您需要提供數組的類型。使用此:

arrayOfIntegers = new int[] {11,12,15,17}; 

JLS Section 10.6

數組初始化可在聲明中指定(§8.3,第9.3節,§14.4),或作爲陣列創建表達式的一部分(§15.10 ),創建一個數組並提供一些初始值。

如果您嘗試在某個範圍內重新分配數組元素,則無法直接分配。無論您是需要單獨指定索引值還是使用@TJCrowder在答案中給出的方式。

3

正確的語法是:

arrayOfIntegers = new int[]{11,12,15,17};