2017-05-31 42 views
0

我是一個初學者,很少有沒有經驗的編程。我想學習Java,因爲我覺得這是一個很好的語言可供學習。如果你看看它,我一直在關注這個播放YouTube上here.導遊,我在第32屆視頻,到目前爲止,Java是非常有前途的需要幫助瞭解數組的方法 - java

不管怎麼說,我需要幫助理解這個代碼:

package learningjava; 

class apples{ 
public static void main(String args[]){ 
    int lucas[]={3,4,5,6,7}; 
    change(lucas); 

    for(int y: lucas) 
     System.out.println(y); 
} 

public static void change(int x[]){ 
    for(int counter=0;counter<x.length;counter++){ 
     x[counter]+=5; 
     } 
    } 
} 

該代碼應該採用數組:int lucas[]={3,4,5,6,7};,並向數組內的每個數字添加5。然後,它應該顯示這些數字加上5的總和;它就是這樣,顯示8,9,10,11,12。我只希望有人能爲我清除這個煙霧,因爲這很難遵循。我不明白陣列lucas連接到int x[]。我也弄不明白爲什麼我們需要在for循環或它做什麼:

for(int counter=0;counter<x.length;counter++){ 
    x[counter]+=5; 
} 

這個職位是劣質的,並解釋,但我絕望的在這一點上就知道究竟是什麼在這回事碼。如果有人能給我一個徹底的解釋,我會真的很感激!

+2

變量名稱是不相關的。您將一個對lucas數組的引用傳遞給change方法,在那裏它被稱爲x。這仍然是盧卡斯的一個參考。 – OldProgrammer

+2

注意:使用'int [] lucas',而不是'int lucas []'。 '[]'是類型的一部分,而不是變量名稱。該語法被「支持C和C++的傳統」支持,但不鼓勵。 –

回答

1

首先,在功能定義

public static void change(int x[]){ 

x正式參數 - 你可以選擇,而不是x任意名稱,因爲它只是佔位符real參數。

後續命令顯示哪些功能將與real參數(至今未知)執行時,該函數將通過正式的參數,而不是真正的一個被稱爲

現在功能稱爲(使用):

change(lucas); 

real參數 - 是的,我們要改變lucas!因此change()函數定義中的語句現在使用lucas而不是x執行。


二:爲什麼我們需要循環

for(int counter=0;counter<x.length;counter++){ 
    x[counter]+=5; 
} 

在您的特定代碼,我們不需要循環也不功能change()。我們可以使用直接的方式添加5到每個元素的數組中:

lucas[0] += 5  // is it shortened form for lucas[0] = lucas[0] + 5 
lucas[1] += 5 
lucas[2] += 5 
lucas[3] += 5 
lucas[4] += 5 

但是,我們可能會遇到一般2個問題:

  1. lucas可能有許多元素,不僅5

  2. 我們要做同樣的事情(添加5至每個元素)與其他(到目前爲止不知道)陣列,E。 G。未來。

因此,我們將解決這兩個問題2一般 - 通過定義功能change()這doesn't預先知道名稱的數組的,也不是number of its items,也不是values of its items。假設x是該數組的佔位符(形式參數)。

x.length 

裝置「使用的屬性(屬性)的長度」該數組的 - 每個陣列具有這種屬性的是它的項目的數量。

所以,代訂正式一個(x)的真正參數(lucasmathew)後,我們就知道這真正陣列的項目的數量。

我們用它在for循環:

for (int counter = 0; counter < x.length; counter++) { 

這裏是另外一個佔位符(櫃),並再次 - 它的名字並不重要,它可能是另一種,即G。 i

for (int i = 0; i < x.length; i++) { 

我們需要數組元素的這個佔位指數(每次一個指數) - 他們的編號10,使第1個要素具有指數0,第二1等 - 所以最後一個將有索引x.length - 1

如何到達這個佔位符(counteri,或其它任意名稱)將按順序有值012等?

for聲明

for (int counter = 0; counter < x.length; counter++) { 

3 parts在其頭部,通過;分隔:

  1. 第1部分定義了怎麼辦最初
    int counter = 0; // set the first value of the placeholder to 0

  2. 第二部分限定了條件延續(的循環):
    counter < x.length; // is the placeholder's value still less than number of items?
    如果這個條件不滿足,則遊戲for循環已經結束。

  3. 最後一部分定義做什麼(連連):
    counter++ // increase the counter's (placeholder) value
    在循環體執行命令

現在(大括號{}之間)之後,在循環體內只有1條語句

 x[counter] += 5;  // Shorter form for x[counter] = x[counter] + 5; 

將被一次又一次地由以前的規則進行(當然代訂真正參數(lucas)之後,正式一個(x))。

0

基本上所發生的事情是數組初始化:

int lucas[]={3,4,5,6,7}; 

然後調用的函數change()和傳遞一個數組名爲lucas它。功能change()通過每個int與傳遞給它的名字x陣列使用counter爲其在0和增量通過1開始直到它擊中x.length這是在這種情況下4數組索引循環。每一次迭代它都會取這個數組中的int值,並將它加入5

P.S. Java是Pass-By-Value,但它在傳遞對象時的作用與Pass-By-Reference類似 - 這是因爲您將引用按值傳遞給對象。當您在change()函數中更改數組中的值時,您也正在更改對此數組對象的所有其他引用的值。

+0

從技術上講,「Java中的所有內容都是傳遞參考」並非如此。我明白你在這裏指的是什麼,但我會建議不要將此稱爲Pass-By-Reference。 – YuVi

0

爲了讀取(打印)數組內的元素,我們使用循環,您的lucas數組由不同的數字組成,因此爲了在數組內打印數字,我們使用循環。

1

用Java語言來說,代碼中的int x[]是一個方法參數/參數。當您致電change(lucas)x參數指向lucas數組的參考。現在,它的指向lucas陣列,for循環低於

for(int counter=0;counter<x.length;counter++){ 
    x[counter]+=5; 
} 

遍歷原來lucas陣列,並添加值。

考慮一個場景,其中x指向方法內的不同參考/內存位置並進行更改,但這些都不會反映在實際的「盧卡斯」變量中。

public static void change(int x[]){ 
    x = new int[]{3,4,5,6,7}; 
    for(int counter=0;counter<x.length;counter++){ 
     x[counter]+=5; 
     } 
    } 
} 

這是在瞭解Java的傳球按值&參考的關鍵。