[英]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.