顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
选择结构
也被称为分支结构,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句if语句和switch语句。
if语句
第一种格式: if(关系表达式) {
语句体;
}
执行流程: 首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
案例:
public class IfDemo1 {
public static void main(String[] args) {
int a = 30;
int b = 20;
int max = a;
if(a<b) {
max = b;
}
System.out.println("最大值为:" + max);
}
}
注意事项:
关系表达式无论简单还是复杂,结果必须是boolean类型
if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
一般来说:有大括号就没有分号,有分号就没有大括号
第二种格式:if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程:首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
案例:
import java.util.Scanner;
class IfDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("你学会流程控制语句了吗?(true/false)");
boolean re = sc.nextBoolean();
if (re) {
System.out.println("自从学会了流程控制语句,妈妈再也不用担心我的学习了");
} else {
System.out.println("看资料还是隔壁老王好!!!");
}
System.out.println("over");
}
}
If语句和三元运算符
三元运算符根据比较判断后,给出的也是两个结果,所以,这种情况和if语句的第二种格式很相似,他们在某些情况下应该是可以相互转换的。
if语句第二种格式和三元运算符:三元运算符的操作都可以使用if语句改进,反之不成立
什么时候不成立呢?
当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。
而输出语句却不能作为一个返回结果。
案例:
class IfAndSan{
public static void main(String[] args){
int a = 10;
int b = 20;
/* if(a == b){
System.out.println(b);
}else{System.out.println(a);}
*/
System.out.println((a == b)?a:b);
}
}
第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
案例:
import java.util.Scanner;
public class IfDemo3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份");
int month = sc.nextInt();
if (month > 12 || month < 1) {
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("北方的冬天太冷,我找不到足够的衣裳过冬");
}
}
}
switch语句
格式:switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
执行流程:1.首先计算出表达式的值
2. 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就束。
3.最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
4.表达式的类型:byte,short,int,char,枚举 JDK7: String
案例:
public class SwitchDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("快输入一个月份好让老王给你看看是几月");
int month = sc.nextInt();
switch(month) {
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("你和你王哥不是一个地理位置");
break;
}
}
}
注意事项:
1. case后面只能跟常量,不能跟变量
2. 多个case后面的常量值不能相同
3. case的顺序有要求么? 没有,可以放到任意位置
4. default一定放在最后么? **也不是,**可以放到任意位置
5. default 可以省略么? 可以
6. break是否可以省略,可以省略,如果省略的话,代码会继续向下执行,不管下面的case是否匹配成功,一直执行到再次遇到break,或者是执行到了switch语句结束
7. switch语句何时结束: 遇到break, 或者代码执行到了switch语句的最后