【Java小白图文教程】-04-分支结构

news2024/10/19 5:53:42

 本套课程将会从0基础讲解Java语言核心技术,适合人群:

  1. 大学中开设了Java语言课程的同学
  2. 想要专升本或者考研的同学
  3. 想要考计算机等级证书的同学
  4. 想要从事Java相关开发开发的同学

精品专题:

01.《C语言从不挂科到高绩点》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482

02. 《SpringBoot详细教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.548203.《SpringBoot电脑商城项目》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.548204.《VUE3.0 核心教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482

================================

||   持续分享系列教程,关注一下不迷路  ||

||   视频教程:小破站:墨轩大楼             ||

================================

======【正文开始】======

1. 程序执行流程

在大多数时候程序的执行都是从主方法开始从上往下顺序执行,但是并非所有的需求都能够顺序执行完成,例如,对一些不同的条件判断获取不同的结果,此时需要使用分支结构;对某些操作反复执行,此时需要循环结构;所以在Java中对于程序的执行流程分为三种类别:

  1. 顺序结构(从main方法开始从上往下顺序执行)
  2. 分支结构(对不同的判断条件执行不同的操作)
    1. if...else..
    2. switch
  1. 循环结构(对一些需要重复执行的程序反复运行,对容器的遍历操作)
    1. for
    2. while
    3. do...while
    4. forEach
    5. 递归

2. 分支语句

2.1. 分支概述

在日常开发中通常对于相关业务需求会涉及到不同的条件,执行不同的操作,例如管理员登录和普通用户登录,看到不同的菜单;对电商系统用户购买了不同件数的商品提供不同的折扣。对以上情况来说就需要使用分支结构实现功能;

Java中的分支语句主要分为两种结构:

  • if..else... 条件分支
  • switch 选择结构

2.2. if..else..

2.2.1. 结构分类

if..else..实际使用方式包含三种:

if(判断条件){
    //执行体
}

if(判断条件){
    //成立时执行
}else{
    //不成立执行
}

if(判断条件1){
    //执行体1
}else if(判断条件2){
    //执行体2
}else if(判断条件3){
    //执行体3
}else{
    //都不成立执行
}

条件判断表达式结果一定是布尔类型

2.2.2 if..else..使用案例
  • 案例一
int age = 16;
//当年龄未到达18岁时,增加10岁
if(age < 18){
    age += 10;
}
System.out.println(age);
  • 案例二
//提供一个年龄,输出该年龄对应的人是否成年
int age = 16;
if(age >= 18){
    System.out.println("成年人,欢迎入内");
}else{
    System.out.println("未满18岁禁止入内");
}
  • 案例三
public static String getType(int age){
if(age < 18){
    return "未成年";
}else if(age < 36){
    return "青年";
}else if(age < 48){
    return "中年";
}else if(age < 60){
    return "中老年";
}else {
    return "老年";
}
}

注意事项:

如果if..else的执行体中只有一行需要被执行的代码,则可无需使用{}包裹,例如:

if(age < 18)
    return "未成年";
else if(age < 36)
    return "青年";
else if(age < 48)
    return "中年";
else if(age < 60)
    return "中老年";
else
    return "老年";

虽然以上的做法语法上是正常编译通过的,但是出于代码可读性的考虑,并不推荐

2.2.3.课堂练习

现在需要设计一个电商系统的的优惠活动算法,对于某件商品,提供一种折扣活动,例如:商品的原价为100RMB,如果用户购买的件数小于5件,按原价出售,如果>=5件<10件,按8折出售,如果>=10件<20件按7折出售,如果超过20件按六折出售;请计算购买N件商品,总共需要花费多少钱?

价格:price

折扣:offset

总件数:count

public class Demo5 {

    /**
     * 根据提供的商品单价和购买件数,返回总价格
     * @param price 单价
     * @param count 购买数
     * @return 总价格
     */
    public static double getTotal(double price,int count){
        double offset;
        if(count < 5){
            offset = 1.0;
        }else if(count < 10){
            offset = 0.8;
        }else if(count < 20){
            offset = 0.7;
        }else{
            offset = 0.6;
        }
        //计算总价
        return price * count * offset;
    }

    public static void main(String[] args) {
        double price = 10;
        int count = 20;
        //调用方法
        double total = getTotal(price,count);
        System.out.println("总价格"+total);
    }
}

2.3. switch语句

if..else..大多数时候用于对一些区间值的分支进行判断操作,但是某些时候对一些确定的值判断可能不太容易,例如:

输入一个月份(1~·12),返回该月份所属的季节:

3,4,5:春
6,7,8:夏
9,10,11:秋
12,1,2:冬

对于以上的问题使用if..else..略显不合理,由于以上的数值取值基本是固定的,因此更适合另一种分支语句:switch

2.3.1. 语法规范

switch语句的流程图如下:

对应的语法规范:

switch(变量表达式){
    case 值1:
        //执行体
        break;
    case 值2:
        //执行体
        break;
    case 值3:
        //执行体
        break;
        ...
    default:
        //执行体
        break;
}

案例代码:

public static String roles(int r){
String name = "";
switch(r){
    case 0:
        name = "学生";
        break;
    case 1:
        name = "老师";
        break;
    case 2:
        name = "院长";
        break;
    case 3:
        name = "管理员";
        break;
    default:
        name = "角色错误";
}
return name;
}
2.3.2. case穿透

在switch语句中为了防止case穿透,需要在每一个case条件之后使用break关键字;否则,程序将会逐层向下穿透。例如上述程序中,如果去掉所有的break:

public static String roles(int r){
String name = "";
switch(r){
    case 0:
        name = "学生";
        //break;
    case 1:
        name = "老师";
        //break;
    case 2:
        name = "院长";
        // break;
    case 3:
        name = "管理员";
        //break;
    default:
        name = "角色错误";
}
return name;
}

调用方法之后,最终无论输入什么都会返回“角色错误”;因此,为了防止case穿透,必须在case语句内容执行完之后,增加break关键字;

当然case穿透在某些时候也能减少一些不必要的代码开销,例如:

public static String getSeason(int month) {
switch (month) {
    case 3:
    case 4:
    case 5:
        return "春季";
    case 6:
    case 7:
    case 8:
        return "夏季";
    case 9:
    case 10:
    case 11:
        return "秋季";
    case 12:
    case 1:
    case 2:
        return "冬季";
}
return "月份错误";
}
2.3.3. switch支持的数据类型

switch语句主要用于对某些确定值的分支,支持的数据类型也是有限的,目前switch支持的数据类型主要包含:

  • byte
  • short
  • int
  • char
  • String(java7新增)
  • enum

枚举类是java5新增的一种类型,用于将一些确定的值列举,以往在对某些状态或者标志位定义时一般使用整型或者字符串类型,但是这种定义方式值的可选范围过于广泛,在开发过程中还需要对一些例外值进行容错处理,而使用枚举类型可以有效避免这一问题;枚举的声明语法:

public enum 枚举类名称{
    枚举值1,
    枚举值2,
    ...
}

例如:

  • 季节只有四个(春夏秋冬)
public enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER
}
  • 性别是有两个(男女)
public enum Sex{
    MALE,
    FAMALE
}
  • 系统的登录角色只有固定的某几个
public enum Role{
    Student,
    Teacher,
    Admin
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(文末免费送书)

上周收到一位网友的私信&#xff0c;希望老牛同学写一篇有关使用 transformers 框架推理大模型的技术细节的文章。 老牛同学刚开始以为这类的文章网上应该会有很多&#xff0c;于是想着百度几篇质量稍高一点的回复这位网友。结果&#xff0c;老牛同学搜索后发现&#xff0c;类…

力扣61~65题

题61&#xff08;中等&#xff09;&#xff1a; 分析&#xff1a; python代码&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def rot…

【含开题报告+文档+PPT+源码】基于SpringBoot电脑DIY装机教程网站的设计与实现

开题报告 随着科技的发展和人们对电脑需求的增加&#xff0c;越来越多的人开始自己组装电脑。然而&#xff0c;针对初学者来说&#xff0c;如何选择合适的硬件配置并进行装机是一个相对复杂的过程。随着各种品牌、型号和规格的硬件不断增多&#xff0c;用户需要一个方便快捷的…

Java项目编译不通过,IDEA无法运行或调试Unit test类

mvn test可以通过&#xff0c;但是通过IDEA无法运行或调试&#xff0c;总是弹出一些依赖错误比如&#xff1a; 程序包xxx.xxx.xxx 不存在或找不到符号 解决办法 步骤1&#xff1a;IDEA 打开 File -> Setting ->Compiler &#xff0c;找到“Automatically show first …

20 Shell Script输入与输出

标出输入、标准输出、错误输出 一、程序的基本三个IO流 一&#xff09;文件描述符 ​ 任何程序在Linux系统中都有3个基本的文件描述符 ​ 比如: ​ cd/proc/$$/fd ​ 进入当前shell程序对于内核在文件系统的映射目录中: [rootlocalhost ~]# cd /proc/$$/fd [rootlocalhos…

基于System.js的微前端实现(插件化)

目录​​​​​​​ 写在前面 一、微前端相关知识 &#xff08;一&#xff09;概念 &#xff08;二&#xff09; 优势 &#xff08;三&#xff09; 缺点 &#xff08;四&#xff09;应用场景 &#xff08;五&#xff09;现有框架 1. qiankun 2. single-spa 3. SystemJ…

【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖

写在前面的话 在Pico上接入MRTK3&#xff0c;目前已有大佬开源。 https://github.com/Phantomxm2021/PicoMRTK3 也有值得推荐的文章。 MRTK3在PICO4上的使用小结 但由于在MacOS上使用MRTK3&#xff0c;无法通过Mixed Reality Feature Tool工具管理MRTK3安装包。 故记录一下…

Dockerr安装Oracle以及使用DBeaver连接

拉取镜像 pull container-registry.oracle.com/database/free:latest 创建容器 说明一下我现在的最新版本是23 docker run -d --name oracle23i -h xrilang -p 1521:1521 container-registry.oracle.com/database/free:latest 查看日志 docker logs oracle23i 设置密码 因为创建…

登录时用户名密码加密传输(包含前后端代码)

页面输入用户名密码登录过程中&#xff0c;如果没有对用户名密码进行加密处理&#xff0c;可能会导致传输过程中数据被窃取&#xff0c;就算使用https协议&#xff0c;在浏览器控制台的Request Payload中也是能直接看到传输的明文&#xff0c;安全感是否还是不足。 大致流程&a…

第二百八十八节 JPA教程 - JPA查询连接OrderBy示例

JPA教程 - JPA查询连接OrderBy示例 以下代码显示如何使用ORDER BY子句和连接条件。 List l em.createQuery("SELECT e " "FROM Project p JOIN p.employees e " "WHERE p.name :project " "ORDER BY e.name").setParameter("pr…

【MogDB】MogDB5.2.0重磅发布第四篇-支持windows版gsql,兼容sqlplus/sqlldr语法

一、背景 目前仍然很多客户的运维机使用windows操作系统&#xff0c;开发人员也是在windows环境上进行编码测试&#xff0c;甚至还有一些客户管理比较严格&#xff0c;禁止开发人员登录服务器进行操作。在MogDB 5.2.0版本之前&#xff0c;没有提供windows平台的gsql&#xff0…

在龙芯笔记本电脑上安装loongnix20

在龙芯笔记本电脑上安装loongnix20。该笔记本电脑原来安装了统信操作系统20。使用时发现屏幕调到最暗还是偏亮。使用起来不方便。于是安装另外一款操作系统loongnix20。 于是下载loongnix20。下载速度很快。下载以后安装也比较顺利。装好试了一下&#xff0c;屏幕亮度可以调到…

二叉树中的最长交错路径

题目链接 二叉树中的最长交错路径 题目描述 注意点 每棵树最多有 50000 个节点每个节点的值在 [1, 100] 之间起点无需是根节点 解答思路 要找到最长交错路径&#xff0c;首先想到的是深度优先遍历因为起点无需是根节点&#xff0c;所以对于任意一个节点&#xff0c;其可以…

分类任务中评估模型性能的核心指标

在机器学习尤其是分类任务中&#xff0c;Accuracy&#xff08;准确率&#xff09;、Precision&#xff08;精确率&#xff09;、Recall&#xff08;召回率&#xff09;和F1 Score&#xff08;F1分数&#xff09;是评估模型性能的四个核心指标。每个指标都有其独特的含义和用途&…

JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?

大厂面试真题:GC 算法有多少种&#xff1f;各自优缺点是什么&#xff1f;年轻代和年老代选择哪种算法最优&#xff1f; 首先回顾一个图&#xff0c;也就是.class文件的类加载过程&#xff0c;以及线程执行、java内存模型图。看过系列1、2、3三篇文章的同学&#xff0c;大脑先回…

[产品管理-46]:产品组合管理中的项目平衡与管道平衡的区别

目录 一、项目平衡 1.1 概述 1.2 项目的类型 1、根据创新程度和开发方式分类 2、根据产品开发和市场周期分类 3、根据风险程度分类 4、根据市场特征分类 5、根据产品生命周期分类 1.3 产品类型的其他分类 1、按物理形态分类 2、按功能或用途分类 3、按技术或创新程…

大数据研究实训室建设方案

一、概述 本方案旨在提出一套全面的大数据研究实训室建设策略&#xff0c;旨在为学生打造一个集理论学习与实践操作于一体的高端教育环境。实训室将专注于培养学生在大数据处理、分析及应用领域的专业技能&#xff0c;通过先进的设施配置、科学的课程体系和实用的实训模式&…

C++之list(2)

list(2) list的迭代器 const迭代器 根据我们之前学过的知识&#xff1a; const int*p1;//修饰的是指向的内容 int *const p2;//修饰的是迭代器本身我们写const迭代器&#xff0c;期望的是指向的内容不能修改。 所以更期望写上面p1的形式 const迭代器与普通迭代器的不同点在于…

03 设计模式-创造型模式-单例模式

单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个对象被创建…

C语言复习第4章 数组

目录 一、一维数组的创建和初始化1.1数组的创建1.2 变长数组1.3 数组的初始化1.4 全局数组默认初始化为01.5 区分两种字符数组1.6 用sizeof计算数组元素个数1.7 如何访问数组元素1.8 一维数组在内存中的存储(连续存储)1.9 访问数组元素的另一种方式:指针变量1.10 数组越界是运行…