[英]Declaring Variable Outside Foreach Loop in Java
有人可以請賜教我以下事項:
public class Loopy {
public static void main(String[] args)
{
int[] myArray = {7, 6, 5, 4, 3, 2, 1};
int counterOne;
for (counterOne = 0; counterOne < 5; counterOne++) {
System.out.println(counterOne + " ");
}
System.out.println(counterOne + " ");
int counterTwo = 0;
for (counterTwo : myArray) {
System.out.println(counterTwo + " ");
}
}
}
在for循環中,我們在循環外聲明counterOne
並在循環內使用它。 這是正確的,只要我們在循環完成后不使用counterOne
。
在foreach循環中,我們還在循環外聲明counterTwo
,然后僅在循環內部使用它。 但是,在這種情況下會拋出錯誤:
“線程中的異常”主“java.lang.RuntimeException:無法編譯的源代碼 - 找不到符號符號:class counterTwo location:class package1.Loopy”
你能幫我理解為什么嗎?
兩者之間的唯一區別是, counterOne
初始化為零,然后逐步分配值(小於5)。
在foreach循環中, counterTwo
被counterTwo
分配,每個數組項。
如果我們在第二個for循環中進行調整,該程序可以工作: for(int counterTwo : myArray)
,而第一個適用於兩種情況:
for (counterOne = 0; counterOne < 5; counterOne++)
從Java語言規范的這一部分開始,關於增強的for
-loops:
增強的for語句具有以下形式:
EnhancedForStatement:
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement
EnhancedForStatementNoShortIf:
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf
請注意,類型聲明UnannType
必須存在於for
循環中。 因此,您應該按如下方式編寫循環:
for (int z : x) {
好吧,簡單,第二個是“特殊”,它實際上是“為每個人”。 它總是需要內部的變量聲明。 而不是解釋它,這里你是一個關於這個的舊問題的鏈接,檢查出來: 為什么在foreach循環內需要聲明變量
這只是每個循環的語法。 您不能在循環本身之外的每個循環中使用定義的變量。 這就是語言的定義方式。
https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.