逻辑运算“与”(&&)、“或”(||)、“非”(!)能根据参数的逻辑关系,生成一个布尔值(true
或 false)。下面这个例子就使用了关系和逻辑操作符。
//: c03:Bool.java
// Relational and logical operators.
import com.bruceeckel.simpletest.*;
import java.util.*;
public class Bool {
static Test monitor = new Test();
public static void main(String[] args) {
Random rand = new Random();
int i = rand.nextInt(100);
int j = rand.nextInt(100);
System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("i > j is " + (i > j));
System.out.println("i < j is " + (i < j));
System.out.println("i >= j is " + (i >= j));
System.out.println("i <= j is " + (i <= j));
System.out.println("i == j is " + (i == j));
System.out.println("i != j is " + (i != j));
// Treating an int as a boolean is not legal Java:
//! System.out.println("i && j is " + (i && j));
//! System.out.println("i || j is " + (i || j));
//! System.out.println("!i is " + !i);
System.out.println("(i < 10) && (j < 10) is "
+ ((i < 10) && (j < 10)) );
System.out.println("(i < 10) || (j < 10) is "
+ ((i < 10) || (j < 10)) );
monitor.expect(new String[] {
"%% i = -?\\d+",
"%% j = -?\\d+",
"%% i > j is (true|false)",
"%% i < j is (true|false)",
"%% i >= j is (true|false)",
"%% i <= j is (true|false)",
"%% i == j is (true|false)",
"%% i != j is (true|false)",
"%% \\(i < 10\\) && \\(j < 10\\) is (true|false)",
"%% \\(i < 10\\) \\|\\| \\(j < 10\\) is (true|false)"
});
}
} ///:~
在 expect()语句包含的正则表达式中,使用小括号能把表达式分组,而’|’表示逻辑“与”。
所以:
(true|false)
意指:字符串的这部分不是’true’就是’false’。因为这些字符在正则表达式中有特殊的
含义,所以如果你希望它们像普通字符一样出现在表达式中,就必须用一个’\\’来转义。
逻辑与、逻辑或、逻辑非操作只可应用于布尔值。与在 C 及 C++中不同的是:不可将一个
非布尔值当作布尔值在逻辑表达式中使用。在前面的代码中用“//!”注释掉的语句,就是错误
的用法。后面的两个表达式先使用关系比较运算,生成布尔值,然后再对产生的布尔值进行
逻辑运算。
注意,如果在应该使用 String 值的地方使用了布尔值,它会自动转换成适当的文本。
在上述程序中,可将整数类型替换成除布尔型以外的其他任何基本数据类型。但要注意,对
浮点数的比较是非常严格的。即使一个数仅在小数部分与另一个数存在极微小的差异,仍然
或 false)。下面这个例子就使用了关系和逻辑操作符。
//: c03:Bool.java
// Relational and logical operators.
import com.bruceeckel.simpletest.*;
import java.util.*;
public class Bool {
static Test monitor = new Test();
public static void main(String[] args) {
Random rand = new Random();
int i = rand.nextInt(100);
int j = rand.nextInt(100);
System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("i > j is " + (i > j));
System.out.println("i < j is " + (i < j));
System.out.println("i >= j is " + (i >= j));
System.out.println("i <= j is " + (i <= j));
System.out.println("i == j is " + (i == j));
System.out.println("i != j is " + (i != j));
// Treating an int as a boolean is not legal Java:
//! System.out.println("i && j is " + (i && j));
//! System.out.println("i || j is " + (i || j));
//! System.out.println("!i is " + !i);
System.out.println("(i < 10) && (j < 10) is "
+ ((i < 10) && (j < 10)) );
System.out.println("(i < 10) || (j < 10) is "
+ ((i < 10) || (j < 10)) );
monitor.expect(new String[] {
"%% i = -?\\d+",
"%% j = -?\\d+",
"%% i > j is (true|false)",
"%% i < j is (true|false)",
"%% i >= j is (true|false)",
"%% i <= j is (true|false)",
"%% i == j is (true|false)",
"%% i != j is (true|false)",
"%% \\(i < 10\\) && \\(j < 10\\) is (true|false)",
"%% \\(i < 10\\) \\|\\| \\(j < 10\\) is (true|false)"
});
}
} ///:~
在 expect()语句包含的正则表达式中,使用小括号能把表达式分组,而’|’表示逻辑“与”。
所以:
(true|false)
意指:字符串的这部分不是’true’就是’false’。因为这些字符在正则表达式中有特殊的
含义,所以如果你希望它们像普通字符一样出现在表达式中,就必须用一个’\\’来转义。
逻辑与、逻辑或、逻辑非操作只可应用于布尔值。与在 C 及 C++中不同的是:不可将一个
非布尔值当作布尔值在逻辑表达式中使用。在前面的代码中用“//!”注释掉的语句,就是错误
的用法。后面的两个表达式先使用关系比较运算,生成布尔值,然后再对产生的布尔值进行
逻辑运算。
注意,如果在应该使用 String 值的地方使用了布尔值,它会自动转换成适当的文本。
在上述程序中,可将整数类型替换成除布尔型以外的其他任何基本数据类型。但要注意,对
浮点数的比较是非常严格的。即使一个数仅在小数部分与另一个数存在极微小的差异,仍然
认为它们是“不相等”的。即使一个数只比零大一点点,它仍然是“非零”值。