- 顺序控制
- 分支控制
- 单分支
- 双分支
- 多分支
- 嵌套分支
- switch
- switch和if的比较
- for循环控制
- while
- do...while循环控制
- 多重循环控制
- break
- continue
- return
- 化繁为简,先死后活
分支控制程序从上到下逐行地执行,中间没有任何判断和跳转。
单分支让程序有选择地执行
if(条件表达式){
执行代码块;
}
说明:如果{}中只有一条语句,则可以不用{},建议加上{}
双分支if(条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
多分支
if(条件表达式1){
执行代码块1;
}
else if(条件表达式2){
执行代码块2;
}
……
else{
执行代码块n;
}
多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有(2)如果有else,所有的条件表达式都不成立,则默认执行代码块n。
嵌套分支在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支称为外层分支,规范:不要超过3层,可读性不好。
if(){
if(){
//if-else……
} else{
//if-else
}
}
注意:scanner.next()接收的是字符串,如果想要从键盘接收字符,则需要从字符串中取出第一个字符:scanner.next().charAt(0)。
switchswitch(表达式){
case 常量1: //当……
语句块1;
break;
case 常量2: //当……
语句块2;
break;
……
case 常量n: //当……
语句块n;
break;
default:
default语句块;
break;
}
- switch关键字,表示switch分支
- 表达式对应一个值
- case 常量1:当表达式的值等于常量1,就执行语句块1
- break:表示退出switch
- 如果和case 常量1匹配,就执行语句块1,如果没有匹配,就继续匹配case 常量2
- 如果一个都没有匹配上,执行default
如果在执行完语句后没有break语句,则直接会执行下一个语句,而不进行判定,直到遇到break语句。
注意点
- 表达式数据类型,应和case后的常量类型一致,或者是可以自动转换成可以相互比较的类型,比如输入的是字符,而常量是int
- switch(表达式)中表达式的返回值必须是(byte,char,int,枚举enum,String,short)
- case子句中的值必须是常量或者常量表达式而不是变量
- default子句是可选的,当没有匹配到case时,执行default
- break语句用来在执行一个case分支后,使程序跳出switch语句块,如果没有写break,程序会顺序执行到switch结尾,除非遇到break,这叫穿透。
switch(month){
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
switch和if的比较
- 如果判断的具体数值不多,而且符号byte、short、int、char、enum、String这六种类型,虽然两个语句都可以使用,建议使用switch语句。
- 其他情况,对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(语句);
}
描述
- for 关键字,表示循环控制
- for 有四要素:(1)循环变量初始化;(2)循环条件;(3)循环操作;(4)循环变量迭代
- 循环操作,这里可以有多条语句,也就是我们要循环执行的代码
- 如果 循环操作(语句)只有一条语句,可以省略{},建议不要省略
循环条件初始化------>循环条件------->循环操作-------->循环变量迭代------->循环条件------->循环操作------->……
注意
- 循环条件是返回一个布尔值的表达式;
- for(;循环判断条件;)中初始化和变量迭代可以写到其他地方,但两边的分号不能省略;for(;;)无限循环,死循环
- 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开;
- 使用内存分析法
int mul = 5;
int start = 0;
for(int i = start,j = mul - start;i <= mul;i++,j = mul-i){
System.out.println(i + " " + "+" + " " + j + " " + "=" + " " + mul);
}
多语句初始化时只写一次int
whilewhile(循环条件){
循环体(语句);
循环变量迭代;
}
- 循环条件是返回一个布尔值的表达式
- while循环是先判断再执行语句
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
- do while是关键字
- 也有循环四要素,只是位置不一样
- 先执行再判断,也就是说,至少执行一次;
- 最后有一个分号;
- 循环条件是返回一个布尔值的表达式;
break将一个循环放在另外一个循环体内,就形成嵌套循环,do…while循环、while循环、for循环均可作为外层循环和内层循环,建议一般使用两层,不要超过3次。
实质上,嵌套循环就是把内层循环当作外层循环的循环体,当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可以结束外层的当次循环,开始下一次的循环。
设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
break语句用于终止某个语句块的执行,一般使用在switch或者循环中。
- break语句出现在多层嵌套的语句块中,可以通过标签指明要终止的是哪一层语句块。
标签的使用
label1:{
label2: {
label3: {
break label2;
}
}
}
- break语句可以指定退出哪层
- label1是标签,名字由程序员指定
- break后指定到哪个label就退出到哪里
- 在实际开发中,尽量不要使用标签
- 如果没有指定break,默认退出最近的循环体。
returncontinue语句用于结束本次循环,继续执行下一次循环;
continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用的规则一样。
化繁为简,先死后活return使用在方法时,表示跳出所在的方法,如果在main表示退出程序。
字符串内容是否相等用String类中的equals方法比较,name.equals(“比较内容”),也可以"比较内容".equals(name),比较推荐后者,可以避免空指针的情况。



