Java学习笔记2.4.3 选择结构 - 多分支结构

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记2.4.3 选择结构 - 多分支结构相关的知识,希望对你有一定的参考价值。

文章目录

零、本讲学习目标

  1. 了解并列式多分支结构
  2. 掌握嵌套式多分支结构
  3. 掌握延拓式多分支结构
  4. 掌握开关式多分支结构

一、多分支结构概述

  • 多分支结构可有四种处理方式:并列式、嵌套式、延拓式、开关式

(一)并列式多分支结构

if (条件1) 
    语句组1

if (条件2) 
    语句组2

……
if (条件n) 
    语句组n

(二)嵌套式多分支结构

if (条件) 
    if (条件1) 
       语句组1
     else 
       ……
    
 else 
    if (条件2) 
       语句组2
     else 
       ……
    

(三)延拓式多分支结构

if (条件1) 
    语句组1
 else if (条件2) 
    语句组2
 
……
 else if (条件n) 
    语句组n
 else 
    语句组n+1

(四)开关式多分支结构

switch (测试表达式) 
    case1:
        语句组1
        break;
    case2:
        语句组2
        break;
     ……
    case 值n:
        语句组n
        break;
    default:
        语句组n+1

二、案例演示

  • 对百分制成绩评定等级
(100, +):超出范围
[90, 100]:优秀
[80, 90):良好
[70, 80):中等
[60, 70):及格
[0, 60):不及格
(-, 0):超出范围

方法一、采用并列式多分支结构评定成绩等级

package net.hw.lesson06;

import java.util.Scanner;

/**
 * 功能:并列式评定成绩等级
 * 作者:华卫
 * 日期:2020年4月12日
 */
public class Example605 
    public static void main(String[] args) 
        // 声明部分
        double score;
        String level;
        Scanner sc = new Scanner(System.in);

        // 输入部分
        System.out.print("score = ");
        score = sc.nextDouble();

        // 处理部分
        level = "";
        if (score > 100) 
            level = "超出范围";
        
        if (score >= 90 && score <= 100) 
            level = "优秀";
        
        if (score >= 80 && score < 90) 
            level = "良好";
        
        if (score >= 70 && score < 80) 
            level = "中等";
        
        if (score >= 60 && score < 70) 
            level = "及格";
        
        if (score >= 0 && score < 60) 
            level = "不及格";
        
        if (score < 0) 
            level = "超出范围";
        

        // 输出部分
        System.out.println("level = " + level);
    

运行程序,查看结果:







总结:并列式多分支结构,优点是易于理解,但缺点是效率低(思考一下,为什么效率低)。

其实,这个程序可以作点优化,因为成绩大于100分或小于0分都是超出范围,所以可以将这两个并列的分之合而为一,如下图所示:

方法二、采用嵌套式多分支结构评定成绩等级


package net.hw.lesson06;

import java.util.Scanner;

/**
 * 功能:嵌套式评定成绩等级
 * 作者:华卫
 * 日期:2020年4月12日
 */
public class Example606 
    public static void main(String[] args) 
        // 声明部分
        double score;
        String level;
        Scanner sc = new Scanner(System.in);

        // 输入部分
        System.out.print("score = ");
        score = sc.nextDouble();

        // 处理部分
        level = "";
        if (score > 100) 
            level = "超出范围";
         else 
            if (score >= 90) 
                level = "优秀";
             else 
                if (score >= 80) 
                    level = "良好";
                 else 
                    if (score >= 70) 
                        level = "中等";
                     else 
                        if (score >= 60) 
                            level = "及格";
                         else 
                            if (score >= 0) 
                                level = "不及格";
                             else 
                                level = "超出范围";
                            
                        
                    
                
            
        

        // 输出部分
        System.out.println("level = " + level);
    

运行程序,查看结果:







刚才是从大到小依次判断分数段,其实也可以反过来,从小到大依次判断分数段,如下图所示:


总结:嵌套式多分支结构,优点是层次分明、效率高,但缺点是嵌套层次太多时显得很繁。

大家可以对照一下Python代码:

课堂作业: 网上搜一搜,了解Java语言最多允许嵌套多少层,顺带也查一查Python语言如何。

方法三、采用延拓式多分支结构评定成绩等级


package net.hw.lesson06;

import java.util.Scanner;

/**
 * 功能:延拓式评定成绩等级
 * 作者:华卫
 * 日期:2020年4月12日
 */
public class Example607 
    public static void main(String[] args) 
        // 声明部分
        double score;
        String level;
        Scanner sc = new Scanner(System.in);

        // 输入部分
        System.out.print("score = ");
        score = sc.nextDouble();

        // 处理部分
        level = "";
        if (score > 100) 
            level = "超出范围";
         else if (score >= 90) 
            level = "优秀";
         else if (score >= 80) 
            level = "良好";
         else if (score >= 70) 
            level = "中等";
         else if (score >= 60) 
            level = "及格";
         else if (score >= 0) 
            level = "不及格";
         else 
            level = "超出范围";
        

        // 输出部分
        System.out.println("level = " + level);
    

  • 运行程序,查看结果






  • 刚才是从大到小依次判断分数段,其实也可以反过来,从小到大依次判断分数段,如下图所示:

  • 总结:延拓式多分支结构,优点是只有一层,并且效率高。希望同学们务必掌握这一种多分支处理方式。

  • 大家可以对照一下Python代码:

方法四、采用开关式多分支结构评定成绩等级


关键点在于将成绩变量取整之后再整除10,以便将各个分数段转换成离散的整数值,这样才能用开关式多分支结构来进行处理。

package net.hw.lesson06;

import java.util.Scanner;

/**
 * 功能:开关式评定成绩等级
 * 作者:华卫
 * 日期:2020年4月12日
 */
public class Example608 
    public static void main(String[] args) 
        // 声明部分
        double score;
        String level;
        Scanner sc = new Scanner(System.in);

        // 输入部分
        System.out.print("score = ");
        score = sc.nextDouble();

        // 处理部分
        level = "";
        if (score > 100 || score < 0) 
            level = "超出范围";
         else 
            switch ((int) score / 10) 
                case 10:
                case 9:
                    level = "优秀";
                    break;
                case 8:
                    level = "良好";
                    break;
                case 7:
                    level = "中等";
                    break;
                case 6:
                    level = "及格";
                    break;
                default:
                    level = "不及格";
            
        

        // 输出部分
        System.out.println("level = " + level);
    

  • 运行程序,查看结果






  • 总结:开关式多分支结构,优点是书写简洁,并且效率高,但缺点是只能针对离散型的情况进行处理。

  • 开关式多分支结构里的测试表达式,类型可以是整数、字符、甚至可以是字符串。

  • 运行程序,查看结果



课堂练习:计算分段函数值

  • 分段函数定义
    y = 3 x 2 − 1 x ≥ 1 ( 1 ) − 2 x + 5 − 1 ≤ x < 1 ( 2 ) 4 x 2 + 3 x < − 1 ( 3 ) y=\\begincases 3x^2-1 &x\\geq1 &(1)\\\\ -2x + 5 &-1\\le x\\lt 1 &(2)\\\\ 4x^2+3 &x\\lt -1 &(3) \\endcases y=3x212x+54x2+3x11x<1x<1(1)(2)(3)

  • 运行结果


  • 我们在编写程序解决问题时,尽量开拓我们的思维,做到一题多解,正所谓条条道路通罗马。既然是一题多解,那就存在一个评判不同解法的问题,要学会了解不同解法的优劣。其实,做任何选择,都存在一个策略性的考虑。

以上是关于Java学习笔记2.4.3 选择结构 - 多分支结构的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记2.4.1 选择结构 - 单分支结构

java基础笔记

Java基础学习笔记(基本规范变量定义运算符分支/循环结构函数)

Java 第五章 循环结构学习笔记

Java学习笔记之:Java流程控制

课程笔记计算机体系结构复习笔记