1.程序控制语句分类
Java中一共有三大结构,分别是 顺序结构、选择结构、循环结构
顺序结构:按顺序依次执行的
选择结构:因为选择的不同,对应的结果也是不同的
循环结构:重复做着某一件事情,直到条件不满足才会终止循环
2.顺序结构
public class Test { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a); System.out.println(b); } }
按照代码的顺序一行一行的执行就是顺序结构
如果代码的顺序发生改变了,那么执行的顺序也会发生对应个改变
2.选择结构
选择结构又叫做分支结构,因为选择的不同最后的执行的选择体中的代码也不同。假设小美去买彩票,如果她买的彩票号码与中奖彩票号码一样则小美中奖,否则小美不中奖
选择结构一共有两种语句一个是 if 语句,还有一个是 switch 语句
2.1 if 选择语句
①单独的 if 语句
public class Test { public static void main(String[] args) { int a = 10; if(a == 10) { System.out.println("中奖"); } System.out.println(a); } }
打印结果:
如果 if 后面的条件判断语句为真,则执行 if 语句体,也就是打印中奖。如果为假,则不执行 if 语句体。
注:不管执不执行 if 语句体,if 语句体以外的语句都要执行。也就是不管执不执行 if 语句体,都要打印 a 的值
② if...else... 语句
public class Test { public static void main(String[] args) { int a = 10; if(a == 10) { System.out.println("中奖"); } else { System.out.println("没中奖"); } } }
执行结果:
如果 if 后面的条件判断语句为真,则执行 if 语句体,否则执行 else 语句体
注:if 语句体 和 else 语句体不会都执行,只会执行其中一个
③ if...else if...else 多层判断选择语句
public class Test { public static void main(String[] args) { int a = 10; int b = 20; if(a == 10) { System.out.println("a中奖"); } else if(b == 20) { System.out.println("b中奖"); } else { System.out.println("没中奖"); } } }
执行结果:
如果 if 后面的条件判断语句为真,则执行 if 语句体 。否则判断 else if 后面的条件判断语句是否为真,如果为真则执行 else if 语句体,否则执行 else 语句
注:多层判断选择语句也只会执行其中的一个语句体
if 选择语句注意事项
注意1:分号问题
这个代码还是会打印 a中奖,但是这并不是在选择语句体中打印的,造成的原因就是 if 判断语句后面的那个分号。if 后面的条件判断语句为真,则执行 if 后面的一条语句。所有语句被 {} 花括号的括起来称为语句体,被视为一条语句。分号默认是一条语句的结束标志,当 if 后面的条件判断语句为真当准备执行 if 后面的一条语句的时候,发现是分号,也就表示已执行完,其实执行的就是空语句
注意2:悬垂 else 问题
public class Test { public static void main(String[] args) { int a = 10; int b = 20; if (a == 6) if(a == 5) System.out.println("yes"); else System.out.println("no"); } }
问题:else 与哪个 if 匹配?
答:if / else 语句中可以不加 大括号,也可以写语句(只能写一条语句)。此时 else 是和最接近的 if 匹配
上述代码中最后没有打印结果因为 else 与第二个 if 匹配了。
通过上面两个代码我们就可以充分感受到代码风格以及代码规范的重要性。
注:分号不要随处放,语句体记得加花括号
2.2 switch 选择语句
switch 语句又叫做多分支语句,通常用在多分支里面。当用 if 使用起来比较复杂的时候我们就可以使用多分支。
比如:输入 1~7 之间的某一个数,然后打印对应的星期,如果用 if 来完成就会涉及到多层 else if 相对就比较复杂,这时我们就可以使用 switch 选择语句
public class Test { public static void main(String[] args) { int a = 1; switch (a) { 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("超出1~7范围"); } } }
执行流程
先计算表达式的值
和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
当表达式的值没有与所列项匹配时,执行default
上述代码执行逻辑,首先计算 switch 后面表达式的值,然后拿这个值依次与 case 后面的常量匹配,一旦匹配上就执行该项下的语句,直到遇到break退出,否则一直执行下次。如果一个都没有匹配上则执行 default
注:case后的常量值不可以重复,不要遗忘 break