簡體   English   中英

在Java中聲明變量外部Foreach循環

[英]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循環中, counterTwocounterTwo分配,每個數組項。

如果我們在第二個for循環中進行調整,該程序可以工作: for(int counterTwo : myArray) ,而第一個適用於兩種情況:

  1. 現有的
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM