流程控制之选择语句:
A:顺序结构(没有基本格式,从上往下依次执行)
B:选择结构(有格式)
if
switch
C:循环结构(有格式)
for
while
do...while
1.选择结构:if语句
三种格式。
a.if语句格式1
if(比较表达式) {
语句体
}
执行流程:
首先判断比较表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
if语句的注意事项:
A:比较表达式无论简单还是复杂,结果必须是boolean类型
B:一般来说:
有左大括号就没有分号,有分号就没有左大括号
练习:如果数字是10,就输出10这个数字
public class IfDemo {
public static void main(String[] args) {
//1.如果数字是10,就输出10这个数字
int num = 9;
if(num==10){
System.out.println(num);//不执行
}
}
}
b.if语句格式2:
if(比较表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
练习:1.判断两个数的最大值(用if和三元实现)
public class IfDemo2 {
public static void main(String[] args) {
int a=10;
int b=20;
//1.判断两个数是否相等(用if和三元实现)
if(a==b){
System.out.println("两数相等");
}else{
System.out.println("两数不等");
}
System.out.println("--------------");
boolean flag = (a==b)?true:false;
System.out.println(flag);
}
}
c.if语句格式3:
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。
练习:键盘录入学生成绩,根据学生成绩判断,输出学生等级
90-100 A
80-89 B
70-79 C
60-69 D
60以下 E
import java.util.Scanner;//导包
public class IfDemo3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//获取键盘录入数据
System.out.println("请输入你的学生成绩");
int score = sc.nextInt();
//拿到成绩使用if做判断
if(score>=90&&score<=100){
System.out.println("成绩等级是A");
}else if(score>=80&&score<=89){
System.out.println("成绩等级是B");
}else if (score>=70&&score<=79) {
System.out.println("成绩等级是C");
}else if(score>=60&&score<=69){
System.out.println("成绩等级是D");
}else if (score>=0&&score<60) {
System.out.println("不及格");
}else {
System.out.println("输入成绩不再考核范围内");
}
}
}
运行结果:
练习2:键盘录入月份的值,输出对应的季节。
春 3,4,5
夏 6,7,8
秋 9,10,11
冬 12,1,2
import java.util.Scanner;//导包
public class IfDemo5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//接受键盘录入数据
System.out.println("请输入月份值");
int month = sc.nextInt();
//拿着月份值做判断
if (month==3||month==4||month==5) {
System.out.println("春天");
}else if (month==6||month==7||month==8) {
System.out.println("夏天");
}else if (month==9||month==10||month==11) {
System.out.println("秋天");
}else if (month==12||month==1||month==2) {
System.out.println("冬天");
}
}
}
练习3:获取三个数据中的最大值
public class IfDemo6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
if (a>b) {
//a大
if (a>c) {
System.out.println(a);
}else {
System.out.println(c);
}
}else {
//b大
if (b>c) {
System.out.println(b);
}else {
System.out.println(c);//输出30
}
}
}
}
2.选择结构:switch语句
switch语句的格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
格式解释:
A:switch表示这是switch语句
B:表达式
表达式的取值:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是String
C:case后面跟的是要和表达式进行比较的值
D:语句体部分可以是一条或多条语句
E:break表示中断,结束的意思,可以结束switch语句
F:default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇 到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
switch语句的注意事项:
A:case后面只能是常量,不能是变量。
B:多个case后面的值不能出现相同的。
C:default可以省略吗?
可以。但是不建议。
D:break可以省略吗?
可以。但是不建议。
容易出现case穿透。
E:default的位置一定要在最后吗?
可以在任意位置,建议在最后。
F:switch语句的结束条件
a:遇到break
b:执行到末尾
练习:用switch语句实现键盘录入月份,输出对应的季节
import java.util.Scanner;//导包
public class SwitchMouth {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);//创建键盘录入对象
System.out.println("请输入月份");
int mouth=sc.nextInt();//获取键盘录入数据
switch(mouth){
case 3:
case 4:
case 5://case穿透
System.out.println("春天");
break;
case 6:
case 7:
case 8:
System.out.println("夏天");
break;
case 9:
case 10:
case 11:
System.out.println("秋天");
break;
case 12:
case 1:
case 2:
System.out.println("冬天");
break;
default:
System.out.println("你输入的月份不正确");
break;
}
}
}
3.if语句和switch语句的各自使用场景:
if语句使用场景:
A:针对结果是boolean类型的判断
B:针对一个范围的判断
C:针对几个常量值的判断
switch语句使用场景:
针对几个常量值的判断
switch语句能够实现的,if一定能够实现。反之不成立