2015-09-27 367 views
0

下正常工作,循環變量增強的for循環

int i; 
for (i = 0; i < 10; i++) {} 

但這並不

// a is an ArrayList of Integers 
Integer i; 
for (i: a) {} 

,我不得不做這種方式:

for (Integer i : a) {} 

爲什麼第二個循環不起作用?

回答

0

對於for循環,您需要3個語句。 你的第二個循環只有2條語句,而你的第一條語句有3條。最重要的是,你從來沒有初始化你的整數i。確保做到

int i =0; 
for(i;i<=10;i++){ 
} 

對於enchanced for循環,你必須有

for (String element : array) { 
System.out.println("Element: " + element); 
} 

你可以看看這個鏈接,它可能會有所幫助。 What is the syntax of enhanced for loop in Java?

+0

第二個是增強for循環。 – Corey

+0

是你的「一」指數組? – Randomshot6

+0

ArrayList,好友。 – Corey

1

想想這樣:如果你總是初始化你的變量會發生什麼?

第一種情況:在本例中初始化,顯然沒有問題。

在第二種情況下:初始化它,說,1.現在你有一個變量,「1」,你把它扔進這個for循環。 「for(1:a)」。那是什麼意思??如果你爲a中的每個值覆蓋「i」的值,那麼當它出現在循環中時,它只是A中的最後一個條目。再說一遍,那真的意味着什麼?爲什麼這會有用?這個循環之外的其他代碼的效果如何?支持它的設計很糟糕,它會導致各種瘋狂的,意想不到的行爲和不可讀的代碼。

在第三種情況下:您的變量在該循環的範圍內顯式聲明,並且非常明顯是暫時的。它將完成從這個數組中提取你需要的東西並完成它的工作。對外部代碼的任何修改都需要用明確的設置器有意地發生。請注意,你不能在這裏初始化它,因爲初始化沒有意義。

0

你必須明確地給出你在數組列表中迭代的對象的類型。在第一個for循環中,您只需插入索引即可。第二,你試圖讓for循環抓住對象而不知道它是什麼類型的對象。

增強for語句相當於一個基本爲形式的語句:

for (Iterator i = Expression.iterator(); i.hasNext();) { 
    TargetType Identifier = (TargetType) i.next(); 
    ... 
} 

14.14.2. The enhanced for statement

0

這一個是正常使用循環。你可以聲明變量類型之外的

int i; 
for (i = 0; i < 10; i++) {} 

Integer i; 
    for (i = 0; i < 10; i++) { 
     System.out.println(i); 
    } 

第二個,如果你想與通用型使用的foreach(也稱爲增強型for循環)時,語法必須是:

for(data_type variable : array | collection){} 

希望得到這個幫助!