选择结构语句
选择结构之if语句
if语句格式1
if ( 关系表达式) {
语句体;
}
执行流程:
先判断关系表达式看其结果是true 还是false ;
如果是true 就执行语句体;
如果是false 就不执行语句体
注意事项:
1 )关系表达式无论简单还是复杂,结果都是boolean 类型;
例:
int a = 3 ;
int b = 4 ;
if ( a = b) {
System . out. println ( "a和b相等" ) ;
}
报错:错误: 不兼容的类型: int 无法转换为boolean
报错原因分析:因为表达式结果的boolean 型,而a = b 是将b的值赋给了a,而a留下来判断,且a的值是int 型,所以报错
如果是:
boolean bool = true ;
boolean bool2 = true ;
if ( bool = bool2) {
System . out. println ( "bool和bool2的值相等" ) ;
}
2 )if 后面的左大括号的地方不能有分号( ; ) ;分号表示语句结束,那么此时的if 条件判断就没有意义,后面{ } 得内容就表示局部代码块,限定局部变量的生命周期。
if语句格式2
if ( 关系表达式) {
语句体1 ;
} else {
语句体2 ;
}
执行流程:
先判断关系表达式看其结果是true 还是false ;
如果是true 就执行语句体1 ;
如果是false 就执行语句体2 。
应用:
判断两个数据是否相同;
输出两个数中较大的值;
奇数和偶数的判断
if . . . else . . . 和三元运算符:都是根据判断条件后,给出两个结果,二者相似,在某些情况下可以相互转换
区别:
1 )三目运算符都可以使用if . . . else . . . 语句改进,但反之,不一定
2 )当if 语句控制的语句体是一条输出语句时,就不能用三元运算符转换。因为三元运算符是一个运算符,它只能操作具体的数据结果值,必须要有一个结果返回,而输出语句不能作为一个返回结果
例:判断是奇数还是偶数
if ( x % 2 == 0 ) {
System . out. println ( "这个数据是偶数" ) ;
} else {
System . out. println ( "这个数据是奇数" ) ;
}
String str = ( x % 2 == 0 ) ? "偶数" : "奇数" ;
System . out. println ( str) ;
if语句格式3
if ( 关系表达式1 ) {
语句体1 ;
} else if ( 关系表达式2 ) {
语句体2 ;
}
. . .
else {
语句体n;
}
执行流程:
首先判断关系表达式1 看其结果是true 还是false
如果是true 就执行语句体1
如果是false 就继续判断关系表达式2 看其结果是true 还是false
如果是true 就执行语句体2
如果是false 就继续判断关系表达式…看其结果是true 还是false
…
如果没有任何关系表达式为true ,就执行语句体n。
需要注意的是,在判断某些条件时,我们要对
1 )错误数据:比如:根据月份判断季节,如果输入负数,我们应该加上对超出范围内的数据的判断,都属于"非法数据" ;
2 )正确数据:范围内的数据;
3 )边界数据:临界值。
例:键盘录入一个月份的值, 判断季节( 不考虑特殊的月份值)
3 , 4 , 5 春季
6 , 7 , 8 夏季
9 , 10 , 11 秋季
12 , 1 , 2 冬季
import java. util. Scanner ;
class IfTest2 {
public static void main ( String [ ] args) {
Scanner sc = new Scanner ( System . in) ;
System . out. println ( "请您输入月份的值:" ) ;
int month = sc. nextInt ( ) ;
if ( month > 12 || month <= 0 ) {
System . out. println ( "对不起,地球没有该月份!" ) ;
} else if ( month>= 3 && month<= 5 ) {
System . out. println ( "当前是春季" ) ;
} else if ( month>= 6 && month<= 8 ) {
System . out. println ( "当前是夏季" ) ;
} else if ( month>= 9 && month <= 11 ) {
System . out. println ( "当前是秋季" ) ;
} else {
System . out. println ( "冬季!" ) ;
}
}
}
输出结果:
E : \Java \firstStage\studyNotes\date_12_27_选择结构语句\code> java IfTest
请您输入月份的值:
12
冬季!
选择结构之switch语句
switch ( 表达式) {
case 值1 :
语句体1 ;
break ;
case 值2 :
语句体2 ;
break ;
. . .
default :
语句体n;
break ;
}
执行流程:
1 )判断表达式值和case 的值是否相等,如果匹配,执行语句体1 ,break 结束;
2 )如果case 值1 不匹配,继续和case 后面的值2 进行比较,如果匹配,执行语句体2 ,break 结束;
. . .
n)如果上面的case 的值和switch 中表达式的结果都不匹配,那么执行default 语句,然后程序默认到末尾结束,break 结束
注意事项:
1 )case 后面的值只能是常量,不能是变量,且多个case 后的值不能出现相同的;
2 )case 语句中的break 必须带上,否则会造成:"case穿透" 现象( 解释:如果某个case 已经匹配了,此时如果没有break ,那么就继续往下执行,但不与下面的case 值进行比较,只执行语句体,直至遇到break ,switch 才结束) ( 视需求,可以利用case 穿透完成一些需求,如输入月份,输出对应的季节)
3 )switch 的结束条件是:
a)语句break 结束;
b)程序默认执行到末尾。
4 )default 语句可以在语句中的任何位置,不影响程序的执行流程( default 的执行:当前case 中都没有匹配的话,执行default )
5 )default 可以省略吗? 可以省略。一般不建议。除非判断的值是固定的。( 单选题) break 可以省略吗? 可以省略,一般不建议。否则结果可能不是你想要的
面试题:
switch中的表达式,它可以是什么样的数据类型呢?
基本的能够使用的数据类型:
byte,short,char,int
JDK5以后,可以跟枚举 (enum)
JDK7以后,可以是String类型