什么时候多线环体不需要花括号?

MxL*_*evs 2 java

为什么这段代码表现正常?我被告知多行循环体应该总是有花括号

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

Xyn*_*riz 5

这里的诀窍是语句和行之间的区别.循环体只会执行下一个语句,除非有花括号,在这种情况下循环将执行花括号内的整个块.(正如在其他答案中所提到的,对每个循环和if语句使用花括号总是好的做法.这使代码更容易理解,更容易正确修改.)

根据您的具体示例:

java中的if-else语句被认为是单个语句.

此外,以下是有效的单行声明:

if(someBoolean)
    someAction(1);
else if (someOtherBoolean)
    someOtherAction(2);
else
    yetAnotherAction();
Run Code Online (Sandbox Code Playgroud)

您可以根据需要添加任意数量的else-if,编译器仍然可以将其视为单个语句.但是,如果您不使用else,则会将其视为单独的行.例如:

for(int a=0; a<list.size; a++)
    if(list.get(a) == 1)
        someAction();
    if(list.get(a) == 2)
        someOtherAction();
Run Code Online (Sandbox Code Playgroud)

这段代码实际上不会编译,因为第二个if语句超出了for循环的范围,因此int a不存在.

  • 我认为最好将其描述为单一陈述.并且for循环在它之后执行语句 (2认同)

Ale*_*ien 5

使用多个语句(不是多行)时需要花括号.
但是,总是使用花括号是一种好习惯.
这可以避免在以后添加语句时出现错误.