我來理解for循環

簡單示例

先看一段簡單的代碼:java

int sum = 0;
int n = 5;

for (int i = 1; i <= n; i++) {
    sum += i;
}

System.out.println(sum);

這段代碼的含義是什麼?求和:sum = 1 + 2 + 3 +  .. + n,當前n爲5。spa

這段代碼是怎麼執行呢?code

  1. 聲明sum,,並賦值0。(int sum = 0)
  2. 聲明n,賦值爲5。(int n = 5; )
  3. 執行for循環:int i = 1;
  4. 執行for循環:判斷i <= n,若是爲true(真),則執行5;若是爲false(假),則執行8
  5. 執行for循環:sum += i
  6. 執行for循環:i++
  7. 執行for循環:跳轉4
  8. 輸出sum

從程序的執行步驟中,咱們能夠看出for循環執行的步驟爲3-7步,組成結構:
for ( 1; 2; 4) {
    3
}
其中:
1爲聲明變量階段,在for循環中執行一次;
2爲邏輯判斷,控制for循環是否繼續;
3爲循環體,須要循環執行的語句;
4爲循環以後的操做。在6執行完i++後,須要從新在4判斷當前i是否還小於等於n,若是不成立則再也不執行5,反之則繼續重複循環。for循環

引入continue標識

當理解完畢這段程序後,咱們對場景稍做調整:
求和:sum = 1 + 2 + 3 +  .. + n,若是遇到3的倍數,則跳過不計算。class

調整後代碼以下:變量

int sum = 0;
int n = 5;

for (int i = 1; i <= n; i++) {
    if (i % 3 == 0) continue;
    sum += i;
}

System.out.println(sum);

經過對比,發現多了語句【if (i % 3 == 0) continue;】,這句話是什麼含義?進階

若是i取餘3爲0,則跳過當前循環體(sum += i),繼續執行i++。循環

如此以來,執行步驟變動爲:語法

  1. 聲明sum,,並賦值0。(int sum = 0)
  2. 聲明n,賦值爲5。(int n = 5; )
  3. 執行for循環:int i = 1;
  4. 執行for循環:判斷i <= n,若是爲true(真),則執行5;若是爲false(假),則執行8
  5. 執行for循環:i % 3 == 0,若是i爲3的倍數,則執行7;反之,則執行6
  6. 執行for循環:sum += i
  7. 執行for循環:i++
  8. 執行for循環:跳轉4
  9. 輸出sum

【引入知識】
i / 3 表示:i除以3;i % 3 表示i除以3的餘數,稱做取模。程序

引入break標識

那若是場景變化以下,又該如何處理呢?

求和:sum = 1 + 2 + 3 +  .. + n,若是數字大於4,則跳過不計算。

int sum = 0;
int n = 5;

for (int i = 1; i <= n; i++) {
    if (i > 4) continue;
    sum += i;
}

System.out.println(sum);

當咱們發現i從5開始大於4,接下來的i每次疊加後都會大於4。即當i大於4後,sum+=i;就永遠不會被執行到了。

這個時候,咱們就能夠使用break,它的意思,正如咱們但願的:跳出當前for循環,再也不執行for循環體的內容。

int sum = 0;
int n = 5;

for (int i = 1; i <= n; i++) {
    if (i > 4) break;
    sum += i;
}

System.out.println(sum);

如此以來,執行步驟變動爲:

  1. 聲明sum,,並賦值0。(int sum = 0)
  2. 聲明n,賦值爲5。(int n = 5; )
  3. 執行for循環:int i = 1;
  4. 執行for循環:判斷i <= n,若是爲true(真),則執行5;若是爲false(假),則執行8
  5. 執行for循環:i > 4,若是爲真,則執行9;反之,則執行6
  6. 執行for循環:sum += i
  7. 執行for循環:i++
  8. 執行for循環:跳轉4
  9. 輸出sum

以上,咱們就理解了for循環,以及continue、break語法。

進階版

1. 使用嵌套for循環,輸出以下圖形:

*
**
***

代碼以下:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

2. 當咱們在使用break語法的時候,其實代碼也能夠這樣寫。

PS:因爲咱們想解釋break的做用,因此並無考慮在實際中的應用。

int sum = 0;
int n = 5;

for (int i = 1; i <= n && i <= 4; i++) {
    sum += i;
}

System.out.println(sum);
相關文章
相關標籤/搜索