【Java从入门到大牛】程序流程控制

news2024/11/15 10:53:17

🔥 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Java从入门到大牛
🌠 首发时间:2023年7月7日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生

目录

  • 程序的执行顺序
  • 分支结构
    • if
    • switch
  • 循环结构
    • for循环
    • for循环案例
    • while循环
    • while循环案例
    • do-while循环
    • 死循环
    • 循环嵌套
  • 跳转关键字:break、continue
  • 生成随机数
    • Random的使用
    • 案例:猜数字游戏

程序的执行顺序

程序中最经典的三种执行顺序

  1. 顺序结构:自上而下地执行代码
  2. 分支结构:根据条件来选择对应代码执行
  3. 循环结构:控制某段代码重复执行

分支结构

if

if分支

根据条件的真假来决定是否执行某段代码

if分支有三种形式
在这里插入图片描述

if分支 第一种形式:if…

if (条件) {
    语句体;	
}

执行流程:首先判断条件表达式的结果,如果结果为 true 则执行语句体,否则不执行

注意事项:if 语句中,如果大括号控制的语句体只有一行代码,则大括号可以省略不写,一般不推荐省略

if分支 第二种形式:if…else…

if (条件) {
    语句体1;	
} else {
    语句体2;	
}

执行流程:首先判断条件表达式的结果,如果结果为 true 则执行语句体1,否则执行语句体2

if分支 第三种形式:if…else…if

if (条件1) {
    语句体1;	
} else if (条件2) {
    语句体2;	
} else if (条件3) {
    语句体4;	
} 
. . .
else {
    语句体n+1;
}

执行流程

  1. 判断条件1的值,如果为 true 则执行语句体1,分支结束;如果为 false 则判断条件2的值
  2. 如果条件2的值为 true 就执行语句体2,分支结束;如果为 false 则判断条件3的值
  3. 如果没有任何条件为 true,就执行最后的 else 分支的语句体n+1

案例:考试奖励

需求:用户通过键盘录入考试成绩,根据成绩所在的区间,程序会打印处不同的奖励机制

分析

  1. 通过键盘录入考试成绩
  2. 由于奖励种类较多,属于多种判断,所以采用 if…else…if 格式实现
  3. 为各种判断设置对应的条件
  4. 为各种判断设置对应的奖励,也就是打印出不同的提示

代码示例

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("请输入考试成绩:");
        int grade = sc.nextInt();

        System.out.print("奖励是:");
        if (grade >= 95) {
            System.out.println("山地车一辆");
        } else if (grade >= 90) {
            System.out.println("去游乐场玩一次");
        } else if (grade >= 80) {
            System.out.println("变形金刚玩具一个");
        } else if (grade >= 60) {
            System.out.println("女子单打");
        } else {
            System.out.println("男女混合双打");
        }
    }
}

switch

switch分支

通过比较值来决定执行哪条分支

switch(表达式) {
    case1:
        执行代码...;
        break;
    case2:
        执行代码...;
        break;
    ...
    case 值n-1:
        执行代码...;
        break;
    default:
        执行代码n;
}

执行流程

  1. 先执行表达式的值,再拿着这个值去与 case 后的值进行匹配
  2. 与哪个 case 后的值一致就执行哪个 case 块的代码,遇到 break 就跳出 switch 分支

if分支 与 switch分支 的比较

  • if 在功能上远远强大于 switch
  • 当条件是区间的时候,应该使用 if 分支结构
  • 当条件是与一个一个的值比较的时候,switch 分支更合适:格式良好、性能较好、代码优雅

使用switch分支的注意事项

  1. 表达式类型只能是 byte、short、int、char,JDK5 开始支持枚举,JDK7 开始支持 String,不支持 double、float、long
  2. case 给出的值不允许重复,且只能是字面量,不能是变量
  3. 正常使用 switch 的时候,不要忘记写 break,否则会出现穿透现象

多学一招:switch穿透性在某些情况下可以简化代码

当存在多个 case 分支的代码相同时,可以把相同的代码放到一个 case 块中,其他的 case 块都通过穿透性穿透到该 case 块执行代码即可,这样可以简化代码

循环结构

for循环

for循环特点

控制一段代码反复执行很多次

for循环格式

for (初始化语句; 循环条件; 迭代语句) {
	循环体语句(重复执行的代码);
}
for (int i = 0; i < 3; i++) {
	System.out.println("Hello World");
}

for循环案例

案例1:求和

需求:求 1-5 之间的数的和,并将求和的结果在控制台输出

分析

  1. 使用 for 循环依次产生 1、2、3、4、5
  2. 在循环外定义一个 int 类型的变量 sum 用于求和,循环每产生一个数,就加到 sum 中去
  3. 循环结束后,输出求和变量即是结果

代码示例

public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i < 6; i++) {
            sum += i;
        }
        System.out.println("sum: " + sum);
    }
}

案例2:求奇数和

需求:求 1-10 之间的奇数的和,并将求和的结果在控制台输出

分析

  1. 使用 for 循环依次产生 1、2、3…9、10
  2. 在循环外定义一个 int 类型的变量 sum 用于求和
  3. 循环每产生一个数,先判断该数是否是奇数,如果是奇数就将其加到 sum 中去
  4. 循环结束后,输出求和变量即是结果

代码示例一:判断奇数

public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 10; i++) {
            if (i % 2 == 1) {   //判断是否为奇数
                sum += i;
            }
        }
        System.out.println("sum: " + sum);
    }
}

代码示例二:直接生成奇数

public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 10; i += 2) {  //每次循环产生的都是奇数
            sum += i;
        }
        System.out.println("sum: " + sum);
    }
}

案例3:求水仙花数

需求:在控制台输出所有的 “水仙花数”,水仙花数必须满足如下 2 个要求:

  1. 水仙花数是一个三位数
  2. 水仙花数的个位、十位、百位的数字立方和等于原数

分析

  1. 定义一个 for 循环从 100 一直到 999
  2. 每次访问到数据后,提取到该数据的个位、十位和百位数字
  3. 使用 if 语句判断:个位、十位、百位的数字立方和是否等于原数,等于则输出原数

代码示例

public class Test {
    public static void main(String[] args) {
        int a, b, c;    //用来存放一个数的个位、十位、百位
        for (int i = 100; i <= 999; i++) {
            a = i % 10;
            b = i / 10 % 10;
            c = i / 100;

            //判断是否为水仙花数
            if (a * a * a + b * b * b + c * c * c == i) {
                //System.out.println("百位: " + c + ", 十位: " + b + ", 个位: " + a);
                System.out.println(i);
            }
        }
    }
}

while循环

while循环格式

初始化语句;
while (循环条件) {
	循环体语句(被重复执行的代码);
	迭代语句;
}
int i = 0; 
while (i < 3) {
	System.out.println("Hello World");
	i++;
}

for循环 和 while循环的区别

  • 功能上是完全一样的,for循环能解决的,用 while 循环也能解决,反之亦然
  • 如果知道要循环几次,建议使用 for;不知道循环几次,建议使用 while

while循环案例

案例:纸张折叠成珠穆朗玛峰的高度

需求:世界最高山峰珠穆朗玛峰的高度是:8848.86米=8848860毫米,假如我有一张足够大的纸,它的厚度是 0.1 毫米。请问:该纸张折叠多少次后,可以达到珠穆朗玛峰的高度?

分析

  1. 定义变量存储珠穆朗玛峰的高度和纸张的高度
  2. 使用 while 循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就表示纸张折叠一次,并把纸张厚度变为原来的两倍
  3. 循环外定义计数变量 count,循环每折叠一次纸张,让 count 变量 +1

代码示例

public class Test {
    public static void main(String[] args) {
        double peakHeight = 8848860;    //山峰高度
        double paperThickness = 0.1;    //纸张厚度
        int count = 0;                  //折叠次数

        while (paperThickness < peakHeight) {
            paperThickness *= 2;
            count++;
        }

        System.out.println("折叠 " + count + " 次后, 纸张厚度为 " + paperThickness + " 毫米");
    }
}

do-while循环

do-while循环特点

先执行后判断

do-while循环格式

初始化语句;
do {
	循环体语句;
	迭代语句;
} while (循环条件);
int i = 0;
do {
	System.out.println("Hello World");
	i++;
} while (i < 3);

三种循环的区别

  • for 循环和 while 循环是先判断后执行,而 do-while 是先执行后判断
  • for 循环和 while 循环的执行流程是一模一样的,功能上无区别
  • 使用规范:如果已知循环次数,建议使用 for 循环;如果不清楚循环次数,建议使用 while 循环
  • 其他区别:for 循环中,控制循环的变量只在循环中使用;while 循环中,控制循环的变量在循环后还可以继续使用

死循环

死循环特点

可以一直执行下去,如果没有干预就不会停下来

死循环的写法

for ( ; ; ) {
	System.out.println("Hello World1");
}

//经典写法
while (true) {
	System.out.println("Hello World2");
}

do {
	System.out.println("Hello World3");
} while (true);

循环嵌套

什么是循环嵌套

循环中又包含循环

循环嵌套的特点

外部循环每循环一次,内部循环会全部执行完一轮

案例:打印矩阵

需求

在控制台使用 * 打印出 10 行 12 列的矩阵

代码示例

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {          //行
            for (int j = 0; j < 12; j++) {      //列
                System.out.print("*");
            }
            System.out.println();       //每打印完一行后要换行
        }
    }
}

跳转关键字:break、continue

跳转关键字

  • break:跳出并结束当前所在循环的执行
  • continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行

注意事项

  • break 只能用于结束所在循环,或者结束所在 switch 分支的执行
  • continue 只能在循环中进行使用

案例:密码验证

需求

系统密码是 520,请用户不断地输入密码进行验证,验证错误则输出:密码错误;验证成功则输出:欢迎进入系统,并停止程序

分析

  1. 定义一个整型变量用于记录正确的密码:520
  2. 使用 while 死循环,让用户不断输入数据,并与正确密码比对并给出比对结果。当验证成功后,则用 break 结束当前循环的执行

代码示例

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int password = 520;
        int digit = 0;

        while (true) {
            System.out.print("请输入密码:");
            digit = sc.nextInt();       //接收用户输入

            if (digit == password) {
                System.out.println("欢迎进入系统");
                break;
            } else {
                System.out.println("密码错误");
            }
        }
    }
}

生成随机数

Random的使用

Random的作用

生成随机数

得到 0-9 的随机数的步骤

在这里插入图片描述
注意事项

nextInt(n) 功能只能生成 0 至 n-1 之间的随机数,不包含 n

Random生成指定区间的随机数

如果要生成 1-10 之间的随机数,该怎么实现呢?

技巧:通过在默认生成的区间上进行加减来得到指定区间

Random r = new Random();
int number = r.nextInt(10) + 1;

案例:猜数字游戏

需求

随机生成一个 1-100 之间的数,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏

分析

  1. 先随机生成一个 1-100 之间的数
  2. 定义一个死循环让用户可以一直猜测
  3. 在死循环里,每次都提示用户输入一个猜测的数字,并与生成的随机数进行比对,然后给出提示信息

代码示例

import java.util.Random;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        int randomDigit = r.nextInt(100) + 1;   //随机生成一个 1-100 的数
        int guessDigit;

        while (true) {
            System.out.print("请输入你猜的数字:");
            guessDigit = sc.nextInt();

            if (guessDigit > randomDigit) {
                System.out.println("猜大了");
            } else if (guessDigit < randomDigit) {
                System.out.println("猜小了");
            } else {
                System.out.println("恭喜你, 猜中了!");
                break;
            }
        }
    }
}

运行结果

在这里插入图片描述

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

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

相关文章

STM32CubeMX实现USB虚拟串口环回测试功能

STM32CubeMX实现USB虚拟串口环回测试功能 &#x1f4cd;参考ST官方给出的参考案例&#xff1a;https://www.stmcu.com.cn/Designresource/detail/LAT/711466&#x1f388;同功能配置可以参考《STM32 USB使用记录&#xff1a;使用CDC类虚拟串口&#xff08;VCP&#xff09;进行通…

MySQL系统函数

系统函数&#xff1a; 数学函数 1、abs() pi() 2、sqrt() 3、cell() floor() round() truncate() cell是向上取整&#xff0c;floor是向下取整。 注意&#xff1a;round负数和java里面的四舍五入有所不同 Round还可以指明位数 turncate是截断 4、power() …

颜色分类 (力扣)JAVA

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这…

用牛鲨NFT赚取SUI的机会,这不就来了?

很高兴向大家宣布Mysten Labs的Bullshark Quests活动&#xff0c;这是一个为Bullshark持有者提供赚取SUI奖励&#xff08;和其他福利&#xff09;的全新方式&#xff0c;Bullshark是ACES计划的一部分。Bullshark Quests将成为一个持续的活动&#xff0c;为Bullshark持有者提供通…

为什么需要多语言并行机器翻译?

随着全球化的加速和不同语言之间的交流需求不断增长&#xff0c;多语言机器翻译&#xff08;Multilingual Parallel Machine Translation&#xff09;成为一个备受关注的领域。传统上&#xff0c;机器翻译系统主要集中于一对特定语言之间的翻译&#xff0c;但这种单一语言对的模…

微服务的划分姿势分享

微服务是一种理念&#xff0c;没有确切的定义和边界&#xff0c;好比设计原则&#xff0c;是属于抽象的概念。在定义不明确的情况下谈划分也是一种各说各话&#xff0c;具体问题需要具体分析。 微服务的划分矛盾在于粒度&#xff0c;如果粒度太大了&#xff0c;分和不分似乎都差…

npm 记录

转 请看原文&#xff0c;我只是怕原文没了&#xff0c;复制了一遍。我目的是想记录缓存那一块。 前端工程化 - 剖析npm的包管理机制 - 掘金 在content-v2/sha512 执行 grep -n "https://registry.npmjs.org/base64-js/-/base64-js-1.0.1.tgz" -r ./ 获取缓存包…

Java 定义返回一个不能被修改、删除元素的List

为啥突然分享下这个&#xff0c;也是从mybatis源码看到了&#xff0c;所以想分享下&#xff1a; org.apache.ibatis.plugin.InterceptorChain 使用 Collections.unmodifiableList(); 示例&#xff1a; public static void main(String[] args) {List<String> canNotEdit…

Android 曲线覆盖图

看图 样例代码 layout.xml <com.XXXXX.utils.GraphBendLineandroid:id"id/ghost_view"android:layout_width"200dp"android:layout_height"200dp"android:layout_margin"40dp"app:node_bar_line_color"#F9FEFD"app:nod…

药物设计学笔记:基础篇

笔记来自《药物设计学》 文章目录 1.药物设计的分子基础2.药物设计的理论基础 1.药物设计的分子基础 化学小分子药物与生物大分子靶标之间相互作用是药物设计的分子基础临床所用的药物50%都属于手性化合物&#xff0c;这是因为药物靶标的基本单元如氨基酸或核苷酸都是手性结构…

快来收藏这几款免费的图标设计软件!

图标素材为网站、应用程序、文档等提供简洁明了的标识&#xff0c;尽管AdobeIllustrator等付费图标设计软件功能强大&#xff0c;但是对于一些轻量级的设计要求&#xff0c;使用免费的图标设计软件是个不错的选择。本文将向大家介绍5款免费的图标设计软件&#xff0c;一起来看看…

【自我提升】Yolov5使用云端GPU训练模型(谷歌免费版和AutoDL收费版对比)

写在前面&#xff1a;继我前几篇Yolov5系列的博客后&#xff0c;来填一个云端训练数据的坑。我公司电脑只能使用CPU训练模型&#xff0c;很拉跨。我自己的笔记本虽然支持GPU&#xff0c;但是运行起来很卡&#xff0c;而且稍微设置设置大一点轮数和批次&#xff0c;就会报当前磁…

CentOS7 主机网卡怎么配置端口聚合

环境&#xff1a; CentOS7 CentOS Linux release 7.7.1908 (Core) 网卡1&#xff1a;瑞昱普通千兆板载网卡 网卡2&#xff1a;EB-LINK intel 82599芯片PCI-E X8 10G 光模块千兆单模1310X1 问题描述&#xff1a; CentOS7 主机网卡怎么配置端口聚合 配置网卡聚合链路的作…

揭秘验证码,你可能不知道的那些事儿

在现代网络世界中&#xff0c;我们经常遇到验证码这个概念。它是一种用于验证使用者身份或防止恶意行为的安全机制。然而&#xff0c;除了表面上的使用和功能&#xff0c;验证码还有许多有趣而不为人所知的方面。本文将带你揭秘验证码背后的秘密&#xff0c;探索你可能不知道的…

Ctfshow web入门 nodejs篇 web334-web344

CTFshow NodeJs web334 前言&#xff1a;做原型链污染&#xff0c;入门的话个人建议先看看P神的文章&#xff0c;只看前四部分就行了。 深入理解 JavaScript Prototype 污染攻击 | 离别歌 (leavesongs.com) 然后也得有一点js基础&#xff0c;不用太多&#xff0c;要不然看起…

浅谈电力监控系统在地铁运维中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;随着我国工业化进程的不断推进&#xff0c;我国监控系统也实现了长足的发展。以往传统的地铁监控模式已经无法满足当前需求&#xff0c;将电力监控系统和地铁综合监控系统已经进行资源整合&#xff0c;有效…

产品需求还原度低应该怎么办?

在实际开发过程中&#xff0c;产品设计的完整性较难保障和实现&#xff0c;产品需求还原度较低&#xff0c;前后端对产品设计理解不深入&#xff0c;可能会随意修改产品需求。从而造成后期需求设计不完整&#xff0c;产品风险增大等问题。 为了解决这一问题&#xff0c;我们可以…

【Linux进阶之路】gcc/g++、Makefile、git

前言 在正式开始之前我们先补充一个知识点——普通用户提权的操作。 sudo 【指令】那如何将tmp1添加到信任白名单——sudoers文件 中呢&#xff1f; 肯定不能自己加&#xff0c;得超级管理员root加——第一步&#xff1a;切到超级用户。 找到sudoers文件——/etc/sudoers …

生物信息学_玉泉路_课堂笔记_01 第一章生物信息学简介

&#x1f345; 课程&#xff1a;生物信息学_玉泉路_课堂笔记 中科院_2022秋季课 第一学期 &#x1f345; 个人笔记使用 &#x1f345; 2023/7/3 &#x1f345; 教材使用&#xff1a; 生物信息学是应用计算机科学和数学方法研究生物学问题的交叉学科。它包括了多个领域&#xf…

显示Gif菜单

需要 最近研究在底部菜单中加入gif播放。这样显得高级一些。研究了一些技术方案&#xff0c;现在写篇博客&#xff0c;沉淀一下。 效果 实现 通过Glide实现。虽然android官方有AnimatedImageDrawable 但是只支持API28以上&#xff0c;也就是android9.0以上的手机。兼容性太差…