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] 程式先鋒網站去看看,那講的挺不錯的.