2

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

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");
    }
}
4

4 回答 4

6

使用多个语句(而不是多行)时需要大括号。
但是,最好始终使用花括号。
这样可以避免以后添加语句时出现错误。

于 2013-08-12T20:33:08.993 回答
5

这里的诀窍是statementline之间的区别。循环体只会执行下一条语句,除非有花括号,在这种情况下,循环将执行花括号内的整个块。(正如其他答案中提到的,在每个循环和 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循环的范围,因此 inta不存在在那里。

于 2013-08-12T20:28:35.007 回答
1

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
于 2013-08-12T20:37:42.163 回答
1

如果您的循环只有一个语句,那么添加花括号不会影响您的代码。如其他人在上面提到的,如果 else 一起被视为一个语句,其间有 else 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
于 2013-08-12T20:49:55.727 回答