第三章 选择语句
3.1 比较运算符
- 大于 >
- 大于等于 >=
- 小于 <
- 小于等于 <=
- 等于 ==
- 不等于 !=
3.2 逻辑运算符
- 单与 &
有假则真。 - 双与 &&
有假则假。&&具有短路效果。左边是false,右边不执行。 - 或 |
有真则真。 - 双或 ||
||和|都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。 - 非 !
非假则真,非真则假。 - 异或 ^
相同为假,不同为真。
3.3 boolean数据类型
boolean 数据类型声明一个具有值 true 或者 false 的变量 。
相等的关系操作符是两个等号 ( = = ) , 而不是一个等号 ( - ) , 后者是指斌值操作符
比较的结果是一个布尔值 : true ( 真 ) 或 false ( 假 ) 。 例如 , 下面的语句显示 true :
double radius » 1 ;
System . out . println ( radius > 0 ) ;
具有布尔值的变量称为布尔变量 ( boolean variable ) , boolean 数据类型用于声明布尔型变量 。 boolean 型变量可以是以下这两个值中的一个 : true 和 false 。 例如 , 下述语句将true 赋值给变 M lightsOn :
boolean lightsOn=true ;
3.4 if语句
if 语句是一个结构 , 允许程序确定执行的路径 。
单分支 if 语句是指当且仅当条件为 true 时执行一个动作 。 单分支 if 语句的语法如下 :
if ( 布尔表达式 ) {
语句 ( 组 ) :
}
给出一个程序 , 提示用户输入一个整数 。 如果该数字是 5 的倍数 , 打印HiFive 。
import java . util . Scanner ;
public class SimplelfDemo {
public static void main ( String [ ] args ) {
Scanner input=new Scanner ( System . in ) ;
System , out . println( " Enter an integer :" ) ;
int number=input . nextlnt();
if ( number % 5 0 )
System . out . pri ntlnC ' HiFive " ) ;
if ( number % 2 0 )
System . out . println ( " HiEven " ) ;
}
}
3.5 双分支if-else语句
if - else 语句根据条件是真或者是假 , 决定执行的路径 。
下面是双分支 if- else语句的语法 :
if ( 布尔表达式 > {
布尔表达式为其时执行的语句 ( 组 ) ;
}
else {
布尔表达式为假时执行的语句 ( 组 ) ;
}
检测一个数是奇数还是偶数 , 如下所示 :
if ( number X 2 == 0 )
System.out.println( number + " is even . " ) ;
else
System.out.println ( number + " is odd . " ) ;
3.6 嵌套的 if 语句和多分支 if - else 语句
if 语句可以在另外一个 if 语句中 , 形成嵌套的 if 语句 。
可以使用多分支 i f - else 语句来给出一个分数
示例:
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//1.获取身高和体重
System.out.print("Please enter your weight and hight:");
double weight=scanner.nextDouble();
double hight=scanner.nextDouble();
//2.BMI=体重/身高^2
double BMI=weight/hight/hight;
//3.将BMI进行判断,输出相应的说明
if(BMI>=30.0){
System.out.println("过胖");
}else if(BMI>=25.0){
System.out.println("超重");
}else if(BMI>=18.5){
System.out.println("正常"); }
else{
System.out.println("偏瘦");
}
}
}
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//1.获取用户输入的年份
System.out.print("Enter the year:");
int year=scanner.nextInt();
//2.将年份进行判断 year%4==0&&year%100!=0 || year%400==0
if( year%4==0&&year%100!=0 || year%400==0){
System.out.println(year+"是闰年");
}else{
System.out.println(year+"是平年");
}
}
}
3.7 switch语句
switch 语句基于变量或者表达式的值来执行语句 。
下面是 switch 语句的完整语法 :
switch ( switch 表达式 ) {
case 值 1 : 语句 ( 组 ) 1 ;
break ;
case 值 2 : 语句 ( 组 ) 2 ;
break ;
case 值 N : 语句 ( 组 ) Nv
break ;
default : R 认情况下执行的语句 ( 组 )
}
程序清单 3 - 5 中的 if 语句是根据单独的一个 true 或 false 条件做出选择的 。 根据变量status 的值 , 会有四种计算税金的情况 。 为了全面考虑所有的情况 , 需要使用嵌套的 if 语句 。 过多地使用嵌套的 if 语句会使程序很难阅读 。 Java 提供 switch 语句来有效地处理多重条件的问题 。 可以使用下述 switch 语句替换程序清单 3 - 5 中的嵌套 if 语句 :
switch ( status ) {
case 0 : compute tax for single filers ;
break ;
case 1 : compute tax for married jointly or qualifying widow ( er ) ;
break ;
case 2 : compute tax for married filing separately ;
break ;
case B : compute tax for head of household ;
break ;
default : System . out . println ( " Error : invalid status " ) ;
System . exit ( 1 ) ;
}
3.8 常见错误与陷阱
- 忘记必要的括号
- 在if行出现错误的分号
- 对布尔值的冗余测试
- 悬空else出现的歧义
- 两个浮点数值的相等测试
- 简化布尔变量赋值
- 避免不同情形中的重复代码
本章小结
- boolean 类型变量可以存储值 true 或 false。
- 关系操作符(<、 <= 、 ==、 ! =、 >、 >=) 产生一个布尔值。
- 选择语句用于可选择的动作路径的编程。 选择语句有以下几种类型: 单分支 if 语句、 双分支 ifelse
语句、 嵌套 if 语句、 多分支 if-else 语句、 switch 语句和条件表达式。 - 各种 if 语句都是基于布尔表达式来控制决定的。 根据表达式的值是 true 或 false, 这些语句选择两种
可能路径中的一种。 - 布尔操作符&&、||、!和^对布尔值和布尔变量进行计算。
- 当对 p1&&p2 求值时, Java 先求 p1 的值, 如果 p1为 true, 再对 p2 求值; 如果 p1 为 false, 就不再对 P2 求值。 当对 p1ll p2 求值时, Java 先求 p1的值, 如果 p1为 false, 再对 p2 求值; 如果p1为 true, 就不再对 p2 求值。 因此, && 也称为条件与操作符或短路与操作符, 而 || 也称为条件或操作符或短路或操作符。
- switch 语句根据 char、 byte,short、 int 或者 String 类型的 switch 表达式来进行控制决定。
- 在 switch 语句中, 关键字 break 是可选的, 但它通常用在每个分支的结尾, 以中止执行 switch语
句的剩余部分。 如果没有出现 break 语句, 则执行接下来的 case 语句。 - 表达式中的操作符按照括号、 操作符优先级以及操作符结合规则所确定的次序进行求值。
- 括号用于强制求值的顺序以任何顺序进行。
- 具有更高级优先权的操作符更早地进行操作。 对于同样优先级的操作符, 它们的结合规则确定操作的顺序。
- 除开赋值操作符的所有二元操作符都是左结合的, 赋值操作符是右结合的。
编程练习:
import java.util.Scanner;
public class Demo3_1 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//1.获取系数 a b c
System.out.print("Enter a,b,c:");
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
//2.根据delt=b^2-4ac的值 进行判断
double delt=b*b-4*a*c;
if(delt>0){
double x1=(-b+Math.