流程控制详解

1、Java流程控制

主要涉及三大流程控制:顺序、分支、循环

如下图:


1)流程2 存在对用户名和密码的校验,是否为空,存在分支控制
2)流程3 用户名和密码在数据库是否存在,存在分支控制
3)流程4/5 顺序控制
备注:token 返回给app,下一次用户打开app,app段只需要把本地的token传给后端,后端校验token是否失效等,如果未失效,就代表登录成功了

2、顺序控制

2.1、基本介绍

程序从上到下逐级运行,中间没有任何判断和跳转

3、分支控制 if-else

让程序有选择的执行,分支控制有4种:
1)单分支控制
2)双分支控制
3)多分支控制
4)switch分支结构

3.1、单分支

基本语法
if (条件表达式) {
  执行代码块;(可以多条语句)
}
tip:当条件表达式为true时,就会执行{}里的代码。如果为false就不执行,此外如果if后面只有一条语句,则可以不写{}

3.2、双分支

基本语法
if (条件表达式) {
  执行代码块1;(可以多条语句)
} else {
  执行代码块2;
}
说明:当条件表达式成立时,执行if里面的代码块,否则执行else里面的代码块。同样的,如果执行的代码块只有一条语句,则{}可以省略。否则不能省略。

3.3、多分支

基本语法
if(条件表达式1){
  执行代码块1;
} else if {
  执行代码块2;
}

else {
  执行代码块n;
}

Tips:
①多分支,可以没有else,如果所有表达式条件都不成立,则一个入口也没有
②如果有else,如果所有条件表达式都不成立,则默认执行else里的代码块。

3.4、嵌套分支

基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构成为外层分支。 规范:不要嵌套超过3层(原因:可读性差)

基本语法
if(){
  if(){
     //if-else
  }else{
     //if-else
  }
}

如果减少嵌套 可以这么写,前提是,不满足条件,需要结束此次循环

 if(原来的表达式取反){

        return;

}

if(){
     //if-else
}else{
     //if-else
}

4、switch分支结构


基本语法
switch(表达式){
  case 常量1:
     代码块1;
     break;

   case 常量n:
    代码块n;
    break;
   default:
    default代码块;
    break;
Tips:
①switch关键字,表示switch分支
②表达式对应一个值

③case 常量1:当表达式的值等于常量1,就执行代码块1
④break:表示退出switch
⑤如果和case常量1匹配,就执行代码块1,如果没有匹配成功,就继续匹配case常量2,以此类推。
⑥如果一个都没有匹配成功,就执行default

细节
1)表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的。
2)switch(表达式)中表达式的返回值必须是:(byte,short, int,char,enum,String)类型。代码如下:3)case子句中的值必须是常量,而不能是变量。
4)default子句是可选的,当没有匹配的case时,执行default
5)break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写 break,程序会       顺序执行到switch结尾。


 switch和if

如果判断的具体数值不多,而且符号byte,short,int,char,enum,String这6种类型。建议使用switch语句。
其他情况,对区间的判断,和对结果为boolean类型判断,使用if,if的适用范围更广
​​​​​​​

5、循环控制


基本介绍
循环控制,就是要让你的代码可以循环的执行。

5.1、for循环控制


基本语法
for(循环变量初始化;循环条件;循环变量迭代){
   循环操作(语句);
}
Tips:
①for关键字,表示循环控制
②for有四个要素:循环变量初始化,循环条件,循环操作,循环变量迭代
③循环操作如果只有一条语句,那么{}可以省略
Tips:循环条件也可以省略,省略之后变成无限循环。代码如下:

for (;;){
    System.out.println("hh6879");
}
②循环条件是返回一个布尔值的表达式
③循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开, 循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。代码如下:

int num1 = 4;
for (int i1 =0,j = 0; i1 < num1; i1++, j+=2){
    System.out.println("i1 ="+i1+" j= "+j);
}

5.1、while循环控制


基本语法
循环变量初始化
while(循环条件){
  循环体(语句);
  循环变量迭代;
}
Tips:
①while与for一样,也有循环四要素。
②但是while与for四要素的位置不一样
③while与for一样写死循环,省略循环变量迭代就可以了。

while细节
①while和for一样,循环条件都是返回一个布尔值的表达式
②while循环是先判断再执行语句(与do…whlie相反)

5.2、do…while循环控制


基本语法
循环变量初始化
do{
  循环体(语句);
  循环变量迭代;
}while(循环条件);
Tips:
①do while都是关键字
②与前面的一样,do…whlie也有循环四要素,只是位置不一样。
③先执行再判断,也就是说do里的语句至少执行一遍。(与while不一样)
④最后有一个分号;

细节
①与前面一样,循环条件是返回一个布尔值的表达式。
②do…while循环是先执行,在判断,因此至少执行一次。

5.3、嵌套循环控制


基本介绍
①当一个循环放在另一个循环内,就形成了嵌套循环。其中for,while,do…while均可以作为外层循环和内层循环。 同分支嵌套一样,建议一般使用两层,不要超过三层,否则代码可读性很差。
②实质上,嵌套循环就是内层循环被当作了外层循环的循环体。只有内层循环的循环条件为false的时候,才会跳出内层循环,才可以结束本次外层循环,开始下一次循环。
③设外层循环次数为m,内层循环次数为n,则内层实际上需要执行m*n次。代码示例如下:

for(int i = 1; i <= 4; i++){ // 外层循环:4次
    for (int j =1;j<=3; j++){ // 内层循环:3次
        System.out.println("hh6879"); // 一共 3*4 = 12 次
    }
}

6、跳转控制语句


6.1、break


为什么需要跳转控制?因为当我们需要循环解决问题,但是循环的次数不确定时,需要当满足某些条件时,终止循环。这时候就需要流程控制语句了。

基本介绍
break语句用于终止某个语句块的执行,一般使用在switch或者循环中。
基本语法
{  …
  break;
  …
}

细节
①break语句出现在多层嵌套语句时,可以通过标签指明要终止那一层的语句块。
②标签的使用
label1 :{ …
label2 :  {…
label3 :    {…
        break label2;
        }
      }
    }

TIps:
①break可以指定退出哪层
②label是标签,由程序员指定。只要是符合规则的命名都可以
③break 指定到那个标签就退到那里
④在实际使用中,尽量不要使用标签。
⑤如果没有指定标签,break默认退出最近的循环体

6.2、continue


基本介绍
①与break不同,continue用于结束本次循环,继续执行下一次循环,而不是直接跳出循环体。
②continue也和break一样,可以通过标签来指定要跳过的是那一层的循环,规则通前面一样。这里不写了。
基本语法
{  …
  continue;
  …
}
细节
①continue的标签与break标签的用法一样,不过要记得continue是本次,break是本层。

6.3、return


基本介绍
return表示跳出所在的方法,在讲方法时细说。这里简单提一下。要注意return写在main方法中执行到的时候会退出程序。

 
 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS中动态库的创建和调用

VS中动态库的创建和调用 库 ​ 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 ​ 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态…

使用 Docker 和 Diffusers 快速上手 Stable Video Diffusion 图生视频大模型

本篇文章聊聊&#xff0c;如何快速上手 Stable Video Diffusion (SVD) 图生视频大模型。 写在前面 月底计划在机器之心的“AI技术论坛”做关于使用开源模型 “Stable Diffusion 模型” 做有趣视频的实战分享。 因为会议分享时间有限&#xff0c;和之前一样&#xff0c;比较简…

Nginx配置反向代理实例二

Mac 安装Nginx教程 Nginx配置反向代理实例一 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 反向代理实例二实现的效果 使用nginx 反向代理&#xff0c;根据访问的地址跳转到不同端口的服务中 nginx 监听端口为81&#xff1b; 访问地址1&#xff1a;http:/…

【高等数学之不定积分】

一、什么是不定积分? 我们可以简单地从英文层面来基础剖析一下&#xff0c;什么是不定积分? 1.1、基本概念 小tips: 二、不定积分运算法则 三、常用积分公式 四、第一类换元积分法 4.1、定义 4.2、常用凑微分公式 4.3、小calculate 五、第二类换元积分法 5.1、定义 …

imgaug库指南(17):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

【深度学习目标检测】十三、基于深度学习的血细胞识别(python,目标检测,yolov8)

血细胞计数是医学上一种重要的检测手段&#xff0c;用于评估患者的健康状况&#xff0c;诊断疾病&#xff0c;以及监测治疗效果。而目标检测是一种计算机视觉技术&#xff0c;用于在图像中识别和定位特定的目标。在血细胞计数中&#xff0c;目标检测技术可以发挥重要作用。 首先…

大模型 LLM RAG在 Text2SQL 上的应用实践

1. 前言 在上篇文章中「LLM Agent在Text2SQL应用上的实践」介绍了基于AI Agent来优化LLM的Text2SQL转换效果的实践&#xff0c;除此之外我们还可以使用RAG&#xff08;Retrieval-Augmented Generation&#xff09;来优化大模型应用的效果。 本文将从以下4个方面探讨通过RAG来…

【微服务】日志搜集elasticsearch+kibana+filebeat(单机)

日志搜集eskibanafilebeat&#xff08;单机&#xff09; 日志直接输出到es中&#xff0c;适用于日志量小的项目 基于7.17.16版本 主要配置在于filebeat&#xff0c; es kibana配置改动不大 环境部署 es kibana单机环境部署 略 解压即可 常见报错&#xff0c;百度即可。 记录…

conda环境下cannot write keep file问题解决

1 问题描述 conda环境下执行如下命令报错&#xff1a; pip install githttps://github.com/wenet-e2e/wenet.git 错误信息如下&#xff1a; (pt) PS D:\code\ptcontainer> pip install githttps://github.com/wenet-e2e/wenet.git Looking in indexes: http://pypi.doub…

基于VSG控制的MMC并网逆变器MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 根据传统同步发电机的运行特性设计了MMC-VSG功频控制器和励磁控制器&#xff0c; 实现了MMC-VSG逆变器对高压电网电压和频率的支撑。该模型包含MMC变流器模块&#xff0c;环流抑制模块&#xff0c;…

【Oracle】数据库对象

一、视图 1、视图概述 视图是一种数据库对象 视图 > 封装sql语句 > 虚拟表 2、视图的优点 简化操作&#xff1a;视图可以简化用户处理数据的方式。着重于特定数据&#xff1a;不必要的数据或敏感数据可以不出现在视图中。视图提供了一个简单而有效的安全机制&#x…

C++标准学习--多线程

在以往多线程的实现的时候&#xff0c;都是自己去亲自创建线程&#xff0c;采用特殊flag 及锁控制线程的运转状态。这无可厚非&#xff0c;但又似乎有重复造轮子的嫌疑。最近发现了一个线程池的轮子&#xff0c;很不错&#xff0c;ZZ一下。 C多线程线程池&#xff08;全详解&a…