四、选择结构

第一章 流程控制

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。
而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。

1.1 流程控制语句分类

  • 顺序结构
  • 分支结构(if, switch)
  • 循环结构(for, while, do…while)

1.2 顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码
都是这样执行的。
顺序结构执行流程图:

 

 

1.3 分支结构之if语句

if语句格式1

格式: 
if (关系表达式) { 
    语句体; 
}
其它语句;

 

执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体
③如果关系表达式的值为false就不执行语句体
④继续执行后面的语句内容

 

 

示例:

 1 public static void main(String[] args) {
 2         System.out.println("开始");
 3         //定义两个变量
 4         int a = 10;
 5         int b = 20;
 6 
 7         //需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
 8         if(a==b){
 9             System.out.println("a等于b");
10         }
11 
12         //需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
13          int c = 10;
14         if(a == c) {
15             System.out.println("a等于c");
16         }
17         System.out.println("结束");
18     }

if语句格式2

格式: 
if (关系表达式) { 
    语句体1; 
} else { 
    语句体2; 
}
其它语句;

 

执行流程:
①首先计算关系表达式的值②如果关系表达式的值为true就执行语句体1
③如果关系表达式的值为false就执行语句体2
④继续执行后面的语句内容
 

 

 

示例:

public static void main(String[] args) {
        System.out.println("开始");
        //定义两个变量
        int a = 10;
        int b = 20;
        b = 5;
        //需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
        if(a > b) { 
            System.out.println("a的值大于b"); 
        } else { 
            System.out.println("a的值不大于b"); 
        }
        System.out.println("结束");
    }
if语句案例:奇偶数
需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。

分析:

①为了体现任意给出一个整数,采用键盘录入一个数据
②判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构 
③判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0 
④根据判定情况,在控制台输出对应的内容
public static void main(String[] args) {
        //为了体现任意给出一个整数,采用键盘录入一个数据。(导包,创建对象,接收数据)
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int number= scanner.nextInt();
        //判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构
        // 判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
        // 根据判定情况,在控制台输出对应的内容
        if(number%2 == 0) {
            System.out.println(number + "是偶数");
        } else {
            System.out.println(number + "是奇数");
        }
    }

 

 

if语句格式3

格式: 
if (关系表达式1) { 
    语句体1; 
} else if (关系表达式2) { 
    语句体2; 
}
…
else if (关系表达式n) { 
    语句体n; 
} else { 
    语句体n+1; 
}
其它语句;
执行流程:
①首先计算关系表达式1的值
②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
④…
⑤如果没有任何关系表达式为true,就执行语句体n+1。

 

 

 

示例:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日

输入 1 输出 星期一
输入 2 输出 星期二
输入 3 输出 星期三
输入 4 输出 星期四
输入 5 输出 星期五
输入 6 输出 星期六
输入 7 输出 星期日
输入 其它数字 输出 数字有误

 

public static void main(String[] args) {
        System.out.println("开始");
        // 需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个星期数(1-7):");
        int week = sc.nextInt();

        if(week == 1) {
            System.out.println("星期一");
        } else if(week == 2) {
            System.out.println("星期二");
        } else if(week == 3) {
            System.out.println("星期三");
        } else if(week == 4) {
            System.out.println("星期四");
        } else if(week == 5) {
            System.out.println("星期五"); 
        } else if(week == 6) { 
            System.out.println("星期六"); 
        } else { 
            System.out.println("星期日"); 
        }
        System.out.println("结束");
    }
if语句格式3案例:
需求:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,
请用程序实现小明到底该获得什么样的礼物,并在控制台输出。

奖励规则:

95~100 山地自行车一辆
90~94 游乐场玩一次
80~89 变形金刚玩具一个
80以下 胖揍一顿
 

分析:

①小明的考试成绩未知,可以使用键盘录入的方式获取值
②由于奖励种类较多,属于多种判断,采用if...else...if格式实现
③为每种判断设置对应的条件
④为每种判断设置对应的奖励
public static void main(String[] args) {
        //小明的考试成绩未知,可以使用键盘录入的方式获取值
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入一个分数:");
         int score = sc.nextInt();
         //由于奖励种类较多,属于多种判断,采用if...else...if格式实现
        // 为每种判断设置对应的条件
        // 为每种判断设置对应的奖励
        // 数据测试:正确数据,边界数据,错误数据
        if(score>100 || score<0) { 
            System.out.println("你输入的分数有误"); 
        } else if(score>=95 && score<=100) { 
            System.out.println("山地自行车一辆"); 
        } else if(score>=90 && score<=94) { 
            System.out.println("游乐场玩一次"); 
        } else if(score>=80 && score<=89) { 
            System.out.println("变形金刚玩具一个"); 
        } else { 
            System.out.println("胖揍一顿"); 
        }
    }

 

经验分享:

1.经验分享一

1.1 问题代码:

int a = 10; 
int b = 20; 
if(a < b);{ 
    System.out.println("a小于b"); 
}
执行结果: 没有执行输出语句。

1.2 问题分析:

代码看起来是判断"当a<b时执行输出语句",但是if语句后面的;分号 结束了判断,容易写错。

 

1.3 解决办法:

if(a < b){ 
    System.out.println("a小于b"); 
}

2.经验分享二

2.1 问题代码:

1 int a = 10; 
2 int b = 20; 
3 if(a > b){ 
4     System.out.println("较大值是"+a); 
5 }else(a < b){ 
6     System.out.println("较大值是"+b); 
7 }

2.2 问题分析:

if...else..的语法格式中,else后面不能写小括号()

 

2.3 解决办法:

 

if(a > b){ 
    System.out.println("较大值是"+a); 
}else{
    System.out.println("较大值是"+b); 
}

第三章 选择语句

3.1 选择语句--switch

  • switch语句格式:
switch(表达式) { 
    case 常量值1: 语句体1; 
    break; 
    case 常量值2: 语句体2; 
    break; 
    ... 
    default: 语句体n+1; 
    break; 
}
//其它语句
  • 执行流程
    • 首先计算出表达式的值  
    • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
    • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。  

 

 

  • switch语句练习-春夏秋冬
    • 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于
      哪个季节,并输出。  
    • 演示效果 
输入: 1、2、12 输出:冬季
输入: 3、4、5 输出:春季
输入: 6、7、8 输出:夏季
输入: 9、10、11 输出:秋季
输入:其它数字 输出:数字有误
 
 
 1 public static void main(String[] args) {
 2         //定义月份变量,判断季节
 3          int month = 6;
 4          //switch语句实现选择
 5         switch(month) {
 6             case 1:
 7                 System.out.println("冬季");
 8                 break;
 9             case 2:
10                 System.out.println("冬季");
11                 break;
12             case 3:
13                 System.out.println("春季");
14                 break;
15             case 4:
16                 System.out.println("春季");
17                 break;
18             case 5:
19                 System.out.println("春季");
20                 break;
21             case 6:
22                 System.out.println("夏季");
23                 break;
24             case 7:
25                 System.out.println("夏季");
26                 break;
27             case 8:
28                 System.out.println("夏季");
29                 break;
30             case 9:
31                 System.out.println("秋季");
32                 break;
33             case 10:
34                 System.out.println("秋季");
35                 break;
36             case 11:
37                 System.out.println("秋季");
38                 break;
39             case 12:
40                 System.out.println("冬季");
41                 break;
42             default:
43                 System.out.println("你输入的月份数字有误");
44                 break;
45         }
46     }

 

switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符
串。

3.2 case的穿透性

在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后
运行,直到遇到break,或者整体switch结束。
public static void main(String[] args) {
        //定义月份变量,判断季节
        int month = 6;
        //switch语句实现选择
        switch (month) {
            case 12:
            case 1:
            case 2:
                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;
        }
    }

 

 

 

posted @ 2021-02-07 13:50  傲娇的奶狗  阅读(115)  评论(0)    收藏  举报