簡體   English   中英

什么時候多線環體不需要花括號?

[英]When are curly braces not required for multi-line loop bodies?

為什么這段代碼表現正常? 我被告知多行循環體應該總是有花括號

public class Sample {

    public static void main(String[] args)
    {
        int[] nums = {1,2,3,4,5,6,7,8,9,10};

        // print out whether each number is
        // odd or even
        for (int num = 0; num < 10; num++)
            if (num % 2 == 0)
                System.out.println(num + " is even");
            else
                System.out.println(num + " is odd");
    }
}

這里的訣竅是語句之間的區別。 循環體只會執行下一個語句 ,除非有花括號,在這種情況下循環將執行花括號內的整個塊。 (正如在其他答案中所提到的,對每個循環和if語句使用花括號總是好的做法。這使代碼更容易理解,更容易正確修改。)

根據您的具體示例:

java中的if-else語句被認為是單個語句。

此外,以下是有效的單行聲明:

if(someBoolean)
    someAction(1);
else if (someOtherBoolean)
    someOtherAction(2);
else
    yetAnotherAction();

您可以根據需要添加任意數量的else-if,編譯器仍然可以將其視為單個語句。 但是,如果您不使用else,則會將其視為單獨的行。 例如:

for(int a=0; a<list.size; a++)
    if(list.get(a) == 1)
        someAction();
    if(list.get(a) == 2)
        someOtherAction();

這段代碼實際上不會編譯,因為第二個if語句超出了for循環的范圍,因此int a不存在。

使用多個語句 (不是多行)時需要花括號。
但是,總是使用花括號是一種好習慣。
這可以避免在以后添加語句時出現錯誤。

If-else語句被認為是單個語句,因此代碼有效。 但是,如果在If-else之后添加一行,那么該行將不被視為for循環的一部分。

例如 -

for (int num = 0; num < 10; num++)
        if (num % 2 == 0)
            System.out.println(num + " is even");
        else
            System.out.println(num + " is odd");
            System.out.println("Blah");

輸出將是 -

0 is even
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
Blah

如果你的循環只有一個語句,那么添加花括號不會影響你的代碼。 如果其他人一起被認為是一個聲明與其他ifs之間,正如其他人已經提到的那樣。 但是,如果沒有大括號,則不會執行多個語句。

for (int i=0;i<5;i++)
   if (i<4)
   System.out.println("Hurray");
   System.out.println("Alas");

產量

Hurray
Hurray
Hurray
Hurray
Alas     //Exited the loop here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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