您能解释一下为什么下面显示的方法是由Java编译和运行的
public static void testIf(int v){
if (v < 10)
if (v >20 )
System.out.println(" 20 IF");
else
System.out.println(" 20 ELSE");
else
System.out.println("10 Else");
}
提前感谢您的帮助。
此致
答案 0 :(得分:8)
就是这样,如果v小于10,你应该得到印刷品10 else
public static void testIf(int v){
if (v < 10) {
if (v >20 ) {
System.out.println(" 20 IF");
} else {
System.out.println(" 20 ELSE");
}
} else {
System.out.println("10 Else");
}
}
编辑:没有任何支撑,它看起来像这样;不知道如何格式化这个让我忍受......
public static void testIf(int v){
if (v < 10)
if (v >20 ) System.out.println(" 20 IF");
else System.out.println(" 20 ELSE");
else System.out.println("10 Else");
}
答案 1 :(得分:3)
通常每个IF都应该与最接近的ELSE链接,为什么最后的其他不是悬挂的ELSE?此外,IF与之相关。
如果你很好地格式化代码,那就更有意义了。
if (v < 10)
if (v > 20)
System.out.println(" 20 IF");
else
System.out.println(" 20 ELSE");
else
System.out.println("10 Else");
完全没问题。因为当您没有{}
时,只有一行代码绑定到范围if
。但是在你的情况下,if之后的下一行是if
,因此范围仍然存在。
然而,逻辑看起来并不好看。但代码仍然可以正常执行。
正如其他人所指出的那样,为了让世界幸福,我总是喜欢使用{}
。
无法访问最后一个ELSE,为什么允许它?
如果您的v
值>= 10
答案 2 :(得分:1)
如果没有花括号,if
可以采用单个语句 - 在本例中为if-else。因此,第一个else
匹配内部if
,第二个else
匹配外部if
。添加花括号并正确缩进代码使其更容易理解:
if (v < 10) {
if (v >20) {
System.out.println(" 20 IF");
} else {
System.out.println(" 20 ELSE");
}
else {
System.out.println("10 Else");
}
答案 3 :(得分:1)
第二个else
属于第一个if
,第二个if
和第一个else
属于第一个if
。
答案 4 :(得分:1)
你的中间if-else块
if (v >20 )
System.out.println(" 20 IF");
else
System.out.println(" 20 ELSE");
被java视为外部if的内部块。我的意思是你的代码编译为:
if (v < 10){
if (v >20 )
System.out.println(" 20 IF");
else
System.out.println(" 20 ELSE");
}
else
System.out.println("10 Else");
答案 5 :(得分:1)
一个好的做法是使用花括号。 {}
所以你的代码看起来像这样。
public static void testIf(int v) {
if (v < 10) {
//This will actually never be true, since v cannot be both less than
//10 and at the same time greater than 20.
if (v >20 ) {
System.out.println(" 20 IF");
}
else {
System.out.println(" 20 ELSE");
}
}
else {
System.out.println("10 Else");
}
}
这意味着以下来电将打印出来:
> testIf(9); -> //20 ELSE
> testIf(12); -> //10 ELSE
> testIf(23); -> //10 ELSE
答案 6 :(得分:1)
最后一个else语句将无法访问,因为if和else语句是两个不同的语句。因此,如果你不给花括号,代码将被视为 -
photo = open(dir, "rb").read()
任何后面没有if语句的else语句都会出错。
答案 7 :(得分:1)
如果您使用格式化程序,它将显示if和else匹配的内容:
public static void testIf(int v) {
if (v < 10)
if (v > 20)
System.out.println(" 20 IF");
else
System.out.println(" 20 ELSE");
else
System.out.println("10 Else");
}
您的假设“通常每个IF应该与最接近的ELSE相关联”并不完全正确。如果不使用花括号,则if和else的主体是紧随其后的第一个语句。这种情况发生在第二个,最里面的if(参见下面的规则),然后是第一个if。
在Java Language Specification中讨论了Java如何选择使用的其他内容。特别是悬挂其他的情况(其中有两个if和一个其他),其解析如下:
Java编程语言,如C和C ++以及许多编程 在他们之前的语言,任意地命令else子句属于 到最内层,如果它可能属于它。
当然,您的示例就是为什么您应该在每个if语句中添加大括号(和缩进),因为这样会更加清晰。
在你的例子中,不可能达到“20 IF”语句,因为它要求V小于10且大于20.虽然Java确实有一些无法访问的代码,但这不是所有的优化可能无法达到的条件。 Java Language Specification显示已完成哪些检查。
有很多规则,但对于控制语句,它们只查看表达式是否是有效常量(总是为真或假)。对于if语句,甚至不进行此检查,因此可以使用它们来禁用一些代码:
这种方法与其他对照的治疗方法一致 结构。但是,为了允许使用if语句 方便地用于“条件编译”目的,实际规则 不同。
答案 8 :(得分:0)
如果您不打算使用正确的缩进和括号,那么如何:
if (v < 10) if (v > 20) System.out.println(" 20 IF"); else System.out.println(" 20 ELSE"); else System.out.println("10 Else");