1. 程式人生 > >java5簡化的for迴圈以及 Java中的for迴圈格式

java5簡化的for迴圈以及 Java中的for迴圈格式

    for迴圈是開界的。它的一般形式為: for(<初始化>; <條件表示式>; <增量>) 語句; 初始化總是一個賦值語句, 它用來給迴圈控制變數賦初值; 條件表示式是一個關係表示式, 它決定什麼時候退出迴圈; 增量定義迴圈控制變數每迴圈一次後 按什麼方式變化。這三個部分之間用";"分開。 例如: for(i=1; i<=10; i++) 語句; 上例中先給 " i " 賦初值1, 判斷 " i " 是否小於等於10, 若是則執行語句, 之後值增 加1。再重新判斷, 直到條件為假, 即i>10時, 結束迴圈。

  注意:

  1. for迴圈中語句可以為語句體, 但要用"{"和"}"將參加迴圈的語句括起來。

  2. for迴圈中的"初始化"、"條件表示式"和"增量"都是選擇項, 即可以預設, 但";"不能預設。省略了初始化, 表示不對迴圈控制變數賦初值。 省略了條件表示式, 則不做其它處理時便成為死迴圈。省略了增量, 則不對迴圈控制變數進行操作, 這時可在語句體中加入修改迴圈控制變數的語句。

  3. for迴圈可以有多層巢狀。

  例:

  #include<stdio.h>

  int main(void)

  {

  int i, j, k;

  printf("i j k/n");

  for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++)

  printf(%d %d %d/n", i, j, k);

  return 0;

  }

  輸出結果為: i j k 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1

加強for迴圈:

J2SE 1.5提供了另一種形式的for迴圈。藉助這種形式的for迴圈,可以用更簡單地方式來遍歷陣列和Collection等型別的物件。本文介紹使用這種迴圈的具體方式,說明如何自行定義能被這樣遍歷的類,並解釋和這一機制的一些常見問題。

  在Java程式中,要“逐一處理”——或者說,“遍歷”——某一個數組或Collection中的元素的時候,一般會使用一個for迴圈來實現(當然,用其它種類的迴圈也不是不可以,只是不知道是因為for這個詞的長度比較短,還是因為for這個詞的含義和這種操作比較配,在這種時候for迴圈比其它迴圈常用得多)。

  對於遍歷陣列,這個迴圈一般是採取這樣的寫法:

  清單1:遍歷陣列的傳統方式

  /* 建立一個數組 */

  int[] integers = {1, 2, 3, 4};

  /* 開始遍歷 */

  for (int j = 0; j < integers.length; j++) {

  int i = integers[j];

  System.out.println(i);

  }

  而對於遍歷Collection物件,這個迴圈則通常是採用這樣的形式:

  清單2:遍歷Collection物件的傳統方式

  /* 建立一個Collection */

  String[] strings = {"A", "B", "C", "D"};

  Collection stringList = java.util.Arrays.asList(strings);

  /* 開始遍歷 */

  for (Iterator itr = stringList.iterator(); itr.hasNext();) {

  Object str = itr.next();

  System.out.println(str);

  }

  而在Java語言的最新版本——J2SE 1.5中,引入了另一種形式的for迴圈。藉助這種形式的for迴圈,現在可以用一種更簡單地方式來進行遍歷的工作。

  1. 第二種for迴圈

  不嚴格的說,Java的第二種for迴圈基本是這樣的格式:

  for (迴圈變數型別 迴圈變數名稱 : 要被遍歷的物件) 迴圈體

  藉助這種語法,遍歷一個數組的操作就可以採取這樣的寫法:

  清單3:遍歷陣列的簡單方式

  /* 建立一個數組 */

  int[] integers = {1, 2, 3, 4};

  /* 開始遍歷 */

  for (int i : integers) {

  System.out.println(i);/* 依次輸出“1”、“2”、“3”、“4” */

  }

  這裡所用的for迴圈,會在編譯期間被看成是這樣的形式:

  清單4:遍歷陣列的簡單方式的等價程式碼

  /* 建立一個數組 */

  int[] integers = {1, 2, 3, 4};

  /* 開始遍歷 */

  for (int 變數名甲 = 0; 變數名甲 < integers.length; 變數名甲++) {

  System.out.println(變數名甲);/* 依次輸出“1”、“2”、“3”、“4” */

  }

  這裡的“變數名甲”是一個由編譯器自動生成的不會造成混亂的名字。

  而遍歷一個Collection的操作也就可以採用這樣的寫法:

  清單5:遍歷Collection的簡單方式

  /* 建立一個Collection */

  String[] strings = {"A", "B", "C", "D"};

  Collection list = java.util.Arrays.asList(strings);

  /* 開始遍歷 */

  for (Object str : list) {

  System.out.println(str);/* 依次輸出“A”、“B”、“C”、“D” */

  }

  這裡所用的for迴圈,則會在編譯期間被看成是這樣的形式:

  清單6:遍歷Collection的簡單方式的等價程式碼

  /* 建立一個Collection */

  String[] strings = {"A", "B", "C", "D"};

  Collection stringList = java.util.Arrays.asList(strings);

  /* 開始遍歷 */

  for (Iterator 變數名乙 = list.iterator(); 變數名乙.hasNext();) {

  System.out.println(變數名乙.next());/* 依次輸出“A”、“B”、“C”、“D” */

  }

  這裡的“變數名乙”也是一個由編譯器自動生成的不會造成混亂的名字。

  因為在編譯期間,J2SE 1.5的編譯器會把這種形式的for迴圈,看成是對應的傳統形式,所以不必擔心出現效能方面的問題。


  jdk1.4及以前版本對collection介面下的物件完成一次迭代,程式碼編寫比較繁瑣,涉及到的方面比較多,比如要計算一個collection集合裡所有整數之和,編寫的方法如下: public Integer sumCollection(Collection col)
 {
  Integer sum=0;
  for(Iterator it=col.iterator();it.hasNext();)
  {
   Integer a=(Integer)it.next();
   sum+=a;
  }
  return sum;
 } 上面的迴圈中涉及到了java.util.Iterator介面,以及需強制型別轉換 運用java5的簡化迴圈和“泛性”可以使程式碼簡化,編寫出來的程式淺顯易懂,易於維護。 完成同樣的功能程式碼如下: public Integer sumCollection2(Collection<Integer> col)
 {
  Integer sum=0;
  for(Integer a:col)
  {
   sum+=a;
  }
  return sum;
 } 其中Integer 代表集合裡的型別,a代表每次迴圈中集合裡的一個物件 此外簡化迴圈還可以運用於陣列 public Integer sumCollection3(Integer[] col)
 {
  Integer sum=0;
  for(Integer a:col)
  {
   sum+=a;
  }
  return sum;
 } 簡化迴圈用於迴圈巢狀,可以避免迴圈指標內迴圈和外迴圈顛倒。 比如: for (Iterator i = suits.iterator(); i.hasNext(); )
    for (Iterator j = ranks.iterator(); j.hasNext(); )
        sortedDeck.add(new Card(i.next(), j.next())); 由於i.next()在內迴圈每次都移向下一個,因此程式執行會丟擲 NoSuchElementException!
正確的寫法是 for (Iterator i = suits.iterator(); i.hasNext(); ) {
    Suit suit = (Suit) i.next();
    for (Iterator j = ranks.iterator(); j.hasNext(); )
        sortedDeck.add(new Card(suit, j.next()));
}
然而運用java5的簡化for迴圈:
for (Suit suit : suits)
for (Rank rank : ranks)
sortedDeck.add(new Card(suit, rank));
程式碼簡潔又不容易出錯
 throws
想學習更多,建議去 [url]http://www.javabiz.cn[/url] 程式先鋒網站去看看,那講的挺不錯的.