为什么这段代码表现正常?我被告知多行循环体应该总是有花括号
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");
}
}
答案 0 :(得分:5)
这里的诀窍是语句和行之间的区别。循环体只会执行下一个语句,除非有花括号,在这种情况下循环将执行花括号内的整个块。 (正如在其他答案中所提到的,对每个循环和if语句使用花括号是总是良好做法。这使代码更容易理解,更容易正确修改。)
根据您的具体示例:
java中的if-else语句被认为是单个语句。
此外,以下是有效的单行声明:
if(someBoolean)
someAction(1);
else if (someOtherBoolean)
someOtherAction(2);
else
yetAnotherAction();
您可以根据需要添加任意数量的其他内容,编译器仍会将其视为单个语句。但是,如果您不使用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
。
答案 1 :(得分:5)
使用多个语句(不是多行)时,您需要花括号 但是,总是使用花括号是一种好习惯 这可以避免在以后添加语句时出现错误。
答案 2 :(得分:1)
If-else语句被认为是单个语句,因此代码有效。但是如果在If-else之后添加一行,那么该行将不被视为for循环的一部分。
e.g。 -
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
答案 3 :(得分:1)
如果你的循环只有一个语句,那么添加花括号不会影响你的代码。如果其他人一起被认为是一个声明与其他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