Dog*_*Dog -2 java boolean-logic if-statement nested
让我们看看这个简单的Java代码:
class A {
public static void main(String[] args) {
if (1 == 1)
if (2 == 2)
if (2 != 2) // <-- should end here and do nothing
System.out.println("2 != 2");
else
System.out.println("2 != 2");
else
System.out.println("1 != 1");
}
}
Run Code Online (Sandbox Code Playgroud)
正如评论所说,它应该看到1==1
,然后2==2
,最嵌套的条件2!=2
失败,所以程序退出而不打印任何东西.但事实并非如此,相反它说2!=2
:
$ javac A.java && java A
2 != 2
Run Code Online (Sandbox Code Playgroud)
为什么?
奇怪的是,它在Python中按预期工作:
>>> if (1 == 1):
... if (2 == 2):
... if (2 != 2):
... print("2 != 2");
... else:
... print("2 != 2");
... else:
... print("1 != 1");
...
>>>
Run Code Online (Sandbox Code Playgroud)
只需缩进代码并为其添加大括号:
class A {
public static void main(String[] args) {
if (1 == 1) {
if (2 == 2) {
if (2 != 2) {
System.out.println("2 != 2");
} else {
//comes here
System.out.println("2 != 2");
}
} else {
System.out.println("1 != 1");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么强烈建议使用Java编码即使你有一行if
或for
一句话也要使用大括号.
使用正确的缩进(Eclipse中的Ctrl+ Shift+ F),您可以看到为什么您的结果如下2 != 2
:
class A {
public static void main(String[] args) {
if (1 == 1) // true
if (2 == 2) // true
if (2 != 2) // false
System.out.println("2 != 2");
else
System.out.println("2 != 2"); // is actually 2 == 2, gets executed
else
System.out.println("1 != 1"); // is actually 2 != 2
}
}
Run Code Online (Sandbox Code Playgroud)
你可能有一个空间重要的Python背景.在Java中,它们并不重要,可以放置而不会对执行产生影响.如果您编写这样的if
语句,Java将在内部嵌套而不是缩进(就像HTML标记一样 - 最后是if,first else等等).
为了防止这种情况,你应该(总是)在Java中使用大括号并使用自动格式化(如上所述在Eclipse中使用Ctrl+ Shift+ F).这有助于提高可读性.顺便说一句:如果你不在Java中使用大括号,只有以下行受到影响if
.然后,每次需要执行多个语句时,都必须添加大括号.因此,大括号也可以提高可扩展性,因为您可以随时添加语句,而不必在以后添加它们.
您在Java代码中有一个悬空的问题.
在Java中,缩进不会影响连接的if
语句else
.它总是最近的.
您可以通过在if和else语句的主体周围使用大括号来解决此问题.您可以通过始终在if
语句主体周围使用大括号来避免此问题.
public static void main(String[] args) {
if (1 == 1) {
if (2 == 2) {
if (2 != 2) // <-- should end here and do nothing
System.out.println("2 != 2");
}
else {
System.out.println("2 != 2");
}
}
else {
System.out.println("1 != 1");
}
}
Run Code Online (Sandbox Code Playgroud)