一、结构:
java程序的流程控制分为3种:顺序结构、分支结构、循环结构;
1.1顺结构:
顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。
1.2分支结构;
if和switch语句;
1.2.1 if单分支:
public class Test{ public static void main(String[] args){ // 随机产生一个随机整数[10,30] int r = (int)(Math.random()*(30-10+1)) + 10; if(r > 15){ System.out.println(r+">15"); }else{ System.out.println(r+"<=15"); } } }
1.2.2if 多分支:
public class Test01{ public static void main(String[] args){ // 随机产生一个随机整数[10,30] int r = (int)(Math.random()*(30-10+1)) + 10; if(r > 15){ System.out.println(r+">15"); }else if(r == 15){ System.out.println(r+"=15"); }else{ System.out.println(r+"<15"); } } }
注意:
a、 if、else关键字只能写一次,else if视情况而定;
b、if多分支时,如果判断大于大的值,用>,如果判断小于小的值,用<号,进行代码优化;
1.3 if嵌套
public class Test{ public static void main(String[] args){ float time = 9.5f; char sex = '男'; // [1] 进入决赛 if(time < 10){ // [2]性别判断 if(sex == '男'){ System.out.println("进入男子组"); }else { System.out.println("进入女子组"); } }else{ System.out.println("oops,不能进入决赛"); } } }
注意:嵌套的深度不易超过4层。
1.4 多值匹配分支switch
public class Test{ public static void main(String[] args){ switch(week){ case 1:{ System.out.println("写代码"); // 结束继续匹配 break; } case 2:{ System.out.println("看电影"); break; } case 3:{ System.out.println("打游戏"); break; } case 4:{ System.out.println("旅游"); break; } case 5:{ System.out.println("开房打游戏"); break; } case 6:{ System.out.println("打牌"); break; } case 7:{ System.out.println("睡觉"); break; } default:{ System.out.println("默认匹配..."); break; } } } }
1.5 switch的两种特殊的情况:
1.5.1 省略break;
public class Test{ public static void main(String[] args){ int week = 1; switch(week){ case 1:{ System.out.println("写代码"); } case 2:{ System.out.println("看电影"); } case 3:{ System.out.println("打游戏"); break; } case 4:{ System.out.println("旅游"); break; } case 5:{ System.out.println("开房打游戏"); break; } case 6:{ System.out.println("打牌"); break; } case 7:{ System.out.println("睡觉"); break; } default:{ System.out.println("默认匹配..."); break; } } } }
输出:写代码 看电影 打游戏;
1.5.2 当多个case的结果一行时,可以省略整个语句块;
public class Test08{ public static void main(String[] args){ // 随机产生一个字符(a-z)判断是元音还是辅音 // [a,z] // [0,25]+a int r = (int)(Math.random() * (25-0+1)) + 0; char c = (char)(r + 'a'); System.out.println("c = " + c); switch(c){ case 'a': case 'e': case 'i': case 'o': case 'u':{ System.out.println("元音:"+c); break; } case 'y': case 'r': case 'w':{ System.out.println("半元音:"+c); break; } default:{ System.out.println("辅音:"+c); break; } } } }
注意:switch表达式支持的匹配方式有整形、char、字符串(jdk1.7以上),迫不得已时不要用字符串匹配,字符串在switch匹配过程中,效率极低。
二、if 和 switch 的比较:
2.1 对比:
相同点:都是分支语句;
不同点:switch 只能进行等值匹配,且条件必须是整形、char类型,jdk1.7之后支持字符串。
if 没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况;