这就是为什么总是用花括号包围块是一种很好的做法,即使它们只有一行。这是您的代码,正确缩进:
for (row = 0; row < NUM_DOWN; row++)
for (column = 0; column < NUM_ACROSS; column++) {
if (column == 0 || column == NUM_ACROSS)
System.out.print("*");
else if (row == 1 || row == NUM_DOWN-1)
System.out.print("*");
else
System.out.print (" ");
}
{
System.out.println();
System.out.println(" ");
写入新行的Your位于 for 循环之外,因此最后只调用一次。
这就是循环的编写方式:
for (row = 0; row < NUM_DOWN; row++) {
for (column = 0; column < NUM_ACROSS; column++) {
if (column == 0 || column == NUM_ACROSS) {
System.out.print("*");
} else if (row == 1 || row == NUM_DOWN-1) {
System.out.print("*");
} else {
System.out.print (" ");
}
} // end inner for
System.out.println();
} // end outer for
大括号的解释
在 Java 中,如果 for 循环或 if 语句中只有一行,则在技术上可以省略花括号。因此这是发现:
if (column == 0 || column == NUM_ACROSS)
System.out.print("");
但是,如果有两行,则需要大括号:
if(column == 0 || column == NUM_ACROSS) {
System.out.print("");
doSomething();
}
if-else if-else 树算作 for 循环内的单个“行”,因此花括号在技术上不是必需的。这是有效的:
for (column = 0; column < NUM_ACROSS; column++)
if (column == 0 || column == NUM_ACROSS)
System.out.print("*");
else if (row == 1 || row == NUM_DOWN-1)
System.out.print("*");
else
System.out.print (" ");
同样,整个 for 循环算作外部 for 循环内的一行:
for (row = 0; row < NUM_DOWN; row++)
for (column = 0; column < NUM_ACROSS; column++)
if (column == 0 || column == NUM_ACROSS)
System.out.print("*");
else if (row == 1 || row == NUM_DOWN-1)
System.out.print("*");
else
System.out.print (" ");
// this line is inside of neither for-loop because of the lack of braces:
System.out.println();
一般来说,对于所有程序员来说,无论水平或能力如何,最好用大括号将他们的代码块括起来,以避免语法上的歧义。这种省略大括号的做法在有多个程序员的情况下会变得很危险,甚至是缩进严重的代码。考虑一下原始帖子中的代码——你能一眼看出什么嵌套在哪个循环中或包含在哪个循环中?
另一个例子,缺少花括号可能会产生意想不到的后果。考虑一种情况,如果日期小于 15,则需要打印“上半年”,如果月份是 11,则需要打印“十一月”。以下代码
if ( day < 6 )
System.out.println("First half.");
if ( month == 11 )
System.out.println("November.");
假设项目需求发生了变化,如果当天少于 15 天,您不再应该打印“上半年”。一些有用的实习生进来并评论了那行:
if ( day < 15 )
// System.out.println("First half.");
if ( month == 11 )
System.out.println("November.");
这个可以吗?不!现在你也打破了 11 月的情况,因为上面的代码在语义上等价于:
if (day < 15)
if (month == 11)
System.out.println("November.");
如果我们一直使用花括号,我们会很好:
if (day < 15) {
// System.out.println("First half.");
}
if (month == 11) {
System.out.println("November.");
}
毫无疑问,还有很多其他原因和例子可以说明为什么这是最佳实践。养成始终使用花括号的习惯,即使这意味着每隔一段时间输入几个额外的字符,这无疑会帮助您保持代码按预期工作,并减少您可能遇到的编译和其他错误的数量。