Categories: 程式設計

程式設計迴圈之章,for。

經過上一篇沒有任何語法解說的文章後,相信各位對於迴圈這東西仍然是一頭霧水,這,不意外。

今天,這篇文章將以實際的例子帶領各位進入迴圈的領域,以下文章將會有3種語言版本的迴圈,分別是C、Java、Visual Basic這三種學校教學常見的語言。另外,獨夜也希望大家在閱讀的同時能練習一遍,自己實際跑一次的感覺絕對比光看不練的感覺還要棒啊!

一樣,先以for來做開頭。

int i,j;
for(i=0;i<10;i++){
  for(j=0;j<5;j++){
    System.out.println("j="+j);
  }
  System.out.println("i="+i);
}

以上語法於Java中適用,以下則是VB的版本。

int i,j
for i = 1 to 10
    for j = 1 to 5
      print j
    next j
  print i
next i

對了,還有 C/C++ 的版本

int i,j;
for(i=0;i<10;i++){
  for(j=0;j<5;j++){
    printf("j= %d",j);
  }
  printf("i= %d",i);
}

知道的讀者或許會很熟悉,沒錯,這就是上次那篇文章的題目,今天這篇文章我先解釋我怎麼解讀這些程式碼的。

我說過,以閱讀文章的方式去解讀程式碼絕對比你把程式碼當作程式碼來看來得輕鬆許多,這邊我先忽略輸出的程式碼。

首先,我定義了 i 跟 j 為整數(integer)。

然後我給 i 一個數字 0 ,若 i 小於 10 的時候,i 就會加 1。

再來我同樣地也給 j 一個數字 0 ,若 j 小於 5 時,j 就會加 1 。

好了,以上就是我對這程式碼的解讀。再來,我們需要一點區域的概念,或者稱區塊的概念。

在 C like 的程式語言中,經常使用大括號來當作區塊的分界線,”{“這個符號到表區塊的起始點,”}”這個符號則代表結束,太抽象嗎? 沒關係,看了下面這張圖後你就會了解區塊到底是什麼了。直接以範例程式來做說明。

通常最外層會用main包起來,以Java為例就像這樣:

public class test_for {
    public static void main(String[] args) {
       int i,j;
       for(i=0;i<10;i++){
         for(j=0;j<5;j++){
           System.out.println("j="+j);
         }
         System.out.println("i="+i);
       }
    }
}

OK,現在我們了解到,程式碼也是有地域性的,在他的領地中,裡面的東西就是屬於他執行的範圍,其他的他一概不會去理會,因為那不甘他的事。換句話說,他只會做主人交給他的事情,並不會也不可能主動去干涉其他人在做的事情。

回頭來看這些程式碼。

int i,j;
for(i=0;i<10;i++){
  for(j=0;j<5;j++){
    System.out.println("j="+j);
  }
  System.out.println("i="+i);
}

因為我們知道了他的領域性,所以在這個程式碼裡,我們可以分成兩個區塊,一個是屬於 i 的,另一個則是 j 的,這在剛剛的說明文字裡就已經分好了。

區塊分好了後,我們來了解一下 for 的真正意義,也就是說在我給他了那些數值與判斷式之後他所做的動作。 從前面的描述中,我們可以知道,他是依著條件在走的,依什麼條件?

依你給的第2個數值,也就是判斷式,當到達判斷式的條件後他就不會繼續執行區塊裡的東西了,直接拿實際例子來說,i 會在執行完裡面的程式後自動加 1 ,直到加到10的時候跳出,因為他明顯的大於10了。

簡單說就是 i 先生一開始手上沒有半顆蘋果(i = 0),然後他做了點工作後,得到一顆蘋果(i++)。最後手上累積了 9 顆蘋果(i<10)終於拿不下了,所以他就辭職不幹了…((咦?

同樣的道理,j 先生跟i 先生一樣,不過在這程式裡面的 j 先生是 i 先生的助手,i 先生每次都會叫 j 先生幫忙做 5 個工作,做完那 5 個工作後,j 先生會跟 i 先生說:「我做好了!」…如此循環的結果,就是 j 先生的工作量遠多於 i 先生,所以結論是 i 先生是個壞上司…XD

正經點,在這程式裡面,j 先生做 5 次工作等於 i 先生的一次,也就是說,當你執行程式時你會發現 i 出現一次,j 會出現 5 次,若在 j 先生的工作範圍裡面放上一段程式碼讓他累加,你會發現最後出來的數值是 i 與 j 所做次數的相乘結果,也就是 50!

你問我怎麼加入? 像這樣就好囉~ (Java)

int i,j,k=0;
for(i=0;i&lt;10;i++){
  for(j=0;j&lt;5;j++){
    k++;
  }
}
System.out.println(k);

不知道以上解說有沒有讓你更了解了for了呢? 希望能幫上你的忙,預祝閱讀本篇文章的您有所收穫!  

duye.chen

Recent Posts

[教學] 打造你的 NFT 智能合約 – ERC721A

GM!前些日子在幣圈亂玩,一路...

2 年 ago

JavaScript – Singleton 設計模式

前言 在設計程式時,我們有時會...

4 年 ago

PlaidML 讓你的 Mac 也能加速 Tensorflow 機器學習!

相信很多使用 Mac 或者手上...

4 年 ago

RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面 嗨,大家好久不見!...

4 年 ago

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇(一、二)文章,我們...

7 年 ago