java 中流量控制的布尔逻辑运算符
Boolean logical operators for flow controls in java
我们不能在 java 流程控制(for 循环、while 循环等)中使用布尔逻辑运算符(例如 &、|、!、^ 等)吗???
我想打印 1 到 100.So 之间的所有偶数 我在下面使用了两个源代码。
import java.util.*;
class Example{
public static void main(String args[]){
int i=1;
while(i<100){
if(i%2==0)
System.out.print(i+" ");
i++;
}
}
}
此代码已编译并打印出 1 到 100 之间的所有偶数。
import java.util.*;
class Example{
public static void main(String args[]){
int i=1;
while(i<100 & i%2==0){
System.out.print(i+" ");
i++;
}
}
}
这段代码没有任何编译 error.but 没有给出任何打印。
这是为什么?
我们不能在 while 循环中使用布尔逻辑运算符吗?
错误在这一行:
while(i<100 & i%2==0){
&
应替换为 &&
:
while(i<100 && i%2==0){
你已经掌握了逻辑运算符...
and 它是一个逻辑运算符 只有当 2 个运算符为真时它才能为真(x>5 和 y<7)如果只有 x>5 为真且 y<7 为真则为真是的,这就是给我们条件是真的,但如果其中一个未被验证,则条件是假的……
但是如果我们有 或 运算符,则只有其中一个为真或两个都为真时,条件才为真......
所以让我们解释一下你的代码。
您有条件(i<100 且 i%2==0)。
0%2 ==0 所以它是真的,当然 i<100 所以虽然 returns 是真的(同时都是真的)但是当 i==1 这里我们有一个问题 1%2!=0 所以i<100 是 true 但 i%2==0 是 false 所以我们得到 **true && false ** 结果是 false 。
(true && true==true) (false && true==false) (false and false==false) (true ||true==true) (true || false==true) (false||false==false )
记住while循环条件是继续循环的条件,也就是说当条件为假时,循环停止。
如果你否定第二个代码中的条件:
!(i<100 & i%2==0)
使用De Morgan's Law,相当于:
i>=100 | i%2!=0
或者换句话说:
i
is greater than or equal to 100 OR i
is odd.
这是while循环的停止条件。嗯,i
最初是 1,这是奇数,所以循环甚至没有执行一次迭代就停止了。
换句话说,您不能将第一个代码重写为第二个代码。它们不等价。 if
条件中的内容在 if
条件中。你不能"merge"把它变成while
条件,因为它们的用途不同。
我还推荐 &&
用于逻辑与,因为它只在必要时计算正确的操作数。有关详细信息,请参阅 What is the difference between & and && in Java?
我们不能在 java 流程控制(for 循环、while 循环等)中使用布尔逻辑运算符(例如 &、|、!、^ 等)吗???
我想打印 1 到 100.So 之间的所有偶数 我在下面使用了两个源代码。
import java.util.*;
class Example{
public static void main(String args[]){
int i=1;
while(i<100){
if(i%2==0)
System.out.print(i+" ");
i++;
}
}
}
此代码已编译并打印出 1 到 100 之间的所有偶数。
import java.util.*;
class Example{
public static void main(String args[]){
int i=1;
while(i<100 & i%2==0){
System.out.print(i+" ");
i++;
}
}
}
这段代码没有任何编译 error.but 没有给出任何打印。
这是为什么? 我们不能在 while 循环中使用布尔逻辑运算符吗?
错误在这一行:
while(i<100 & i%2==0){
&
应替换为 &&
:
while(i<100 && i%2==0){
你已经掌握了逻辑运算符... and 它是一个逻辑运算符 只有当 2 个运算符为真时它才能为真(x>5 和 y<7)如果只有 x>5 为真且 y<7 为真则为真是的,这就是给我们条件是真的,但如果其中一个未被验证,则条件是假的…… 但是如果我们有 或 运算符,则只有其中一个为真或两个都为真时,条件才为真...... 所以让我们解释一下你的代码。 您有条件(i<100 且 i%2==0)。 0%2 ==0 所以它是真的,当然 i<100 所以虽然 returns 是真的(同时都是真的)但是当 i==1 这里我们有一个问题 1%2!=0 所以i<100 是 true 但 i%2==0 是 false 所以我们得到 **true && false ** 结果是 false 。 (true && true==true) (false && true==false) (false and false==false) (true ||true==true) (true || false==true) (false||false==false )
记住while循环条件是继续循环的条件,也就是说当条件为假时,循环停止。
如果你否定第二个代码中的条件:
!(i<100 & i%2==0)
使用De Morgan's Law,相当于:
i>=100 | i%2!=0
或者换句话说:
i
is greater than or equal to 100 ORi
is odd.
这是while循环的停止条件。嗯,i
最初是 1,这是奇数,所以循环甚至没有执行一次迭代就停止了。
换句话说,您不能将第一个代码重写为第二个代码。它们不等价。 if
条件中的内容在 if
条件中。你不能"merge"把它变成while
条件,因为它们的用途不同。
我还推荐 &&
用于逻辑与,因为它只在必要时计算正确的操作数。有关详细信息,请参阅 What is the difference between & and && in Java?