java基础--程序流程控制

简介: - **for循环案例**:求1-100的和及奇数和。- **while循环**:未知循环次数时使用,基础案例:打印"Hello World"五次。- **do-while循环**:至少执行一次,区别于先判断的for和while循环。- **循环嵌套**:一个循环内含另一循环,例如打印矩形。- **跳转语句**:`break`用于提前结束循环,`continue`跳过当前循环迭代。```

二、循环结构

各位同学,接下来我们学习循环结构。循环结构可以控制一段代码重复执行。循环结构有for循环、while循环、do-while循环。

2.1 for循环——格式和流程

这里首先来学习for循环,同学们重点掌握for循环的书写格式,并理解for循环的执行流程。

1. for循环的格式和流程

为了让大家更直观的理解for循环的执行流程,我们直接来看具体的案例代码。

比如:我们想要在控制台打印输出3个HelloWorld

//需求:打印3行Hello World
for(int i = 0; i < 3; i++) {
   
    System.out.println("Hello World");
}

如下图所示,是按照下面的① ② ③ ④, ② ③ ④... 的顺序来执行的;

当②条件为true时,再依次执行③④代码,然后回到②继续判断

当②条件为false时,就结束循环

1661137599188

具体执行的每一步可以看下面的图解

1661138616082

通过上面的案例演示,最后我们再总结一下for循环的格式

//for循环格式:
for (初始化语句; 循环条件; 迭代语句) {
   
    循环体语句(重复执行的代码);
}

初始化语句:一般是定义一个变量,并给初始值
循环条件:一般是一个关系表达式,结果必须是true或者false
迭代语句:用于对条件进行控制,一般是自增或者自减
循环语句体:需要重复执行的代码

2. for循环有哪些应用场景

通过上面的学习,我们已经知道了for循环怎么编写,并且也知道了它的执行流程。

那么具体在哪些实际场景下使用呢?其实只要是重复做的事情,都可以用循环语句来做

比如:在京东的网页上展示100台手机信息,我们只需要把展示数据的代码写一份,重复执行就可以了。

1661139301013

再比如:再我们教学管理系统中,有很多班级需要展示在页面上,我们没必要每一个班级都写一份展示数据代码,只需要写一份重复执行就可以了。

1661139453144

2.2 for循环案例1——求和

学完for循环的格式和流程之后,我们再通过案例来巩固一下。通过这个案例,主要是让同学们掌握一种使用程序来求和的思想。

//1.掌握使用for循环批量产生数据。
for (int i = 1; i <= 100; i++) {
   
    System.out.println(i);
}
求和的思路分析:
    1)首先需要定义一个求和变量,一般命名为sum
    2)再遍历得到所有需要求和的数据(1~100之间的所有整数)
    3)让需要求和的数据和sum累加,
    结果:所有数据累加完之后最终sum就是所有数据的和
//2.需求:求1~100中所有整数的和
int sum = 0;
//定义一个循环,先产生1-100,这100个数
for (int i = 1; i <= 100; i++) {
   
    //每产生一个数据,就把这个数和sum累加
    sum += i; //sum = sum  + i;
}
System.out.println("1-100的数据和:" +  sum);

分析上面代码的执行过程:

i=1时:sum=0+1; sum=1;
i=2时:sum=1+2; sum=3;
i=3时:sum=3+3; sum=6;
i=4时:sum=6+4; sum=10;
...
i=100: sum+=99; sum=5050

2.2 for循环案例2——求奇数和

需求:求1~100之间奇数的和

1. 代码写法一

求奇数和的思路(只是求和的数据变成了奇数,思路和前面没有变化)
    1)首先需要定义一个求和变量,这里命名为sum1
    2)再遍历得到所有需要求和的数据(1~100之间的所有奇数)
    3)让需要求和的数据和sum1累加,
    结果:所有数据累加完之后最终sum1就是所有数据的和
//1)定义一个变量用于求和
int sum1 = 0;
//2)定义一个循环产生1-100之间的奇数
for (int i = 1; i < 100; i+=2) {
   
    // i = 1 3 5 7 ...
    //3)让需要求和的数据和sum1累加,
    sum1 += i;
}
System.out.println("1-100之间的奇数和:" +  sum1);

以上代码的执行流程分析

初始化sum1=0;

当i=1时:sum1+=1; sum1=1;
当i=3时:sum1+=3; sum1=4;
当i=5时:sum1+=5; sum1=9;
...
当i=99时:sum1+=99; sum1=2500

2. 代码写法二

求奇数和的思路(只是求和的数据变成了奇数,思路和前面没有变化)
    1)首先需要定义一个求和变量,这里命名为sum2
    2)再遍历得到所有需要求和的数据(1~100之间的所有整数)
    3)在求和之前先对数据判断,如果是奇数,才和sum1累加;否则什么也不干
    结果:所有数据累加完之后最终sum1就是所有数据的和
//1)首先需要定义一个求和变量,这里命名为sum2
int sum2 = 0; 
//2)再遍历得到所有需要求和的数据(1~100之间的所有整数)
for (int i = 1; i <= 100; i++) {
   
    //i = 1 2 3 4 5 6 ... 99 100
    //3)在求和之前先对数据判断,如果是奇数,才和sum1累加;否则什么也不干
    if(i % 2 == 1){
   
        // i = 1 3 5 7 9 ... 99
        sum2 += i;
    }
}
System.out.println("1-100之间的奇数和:" + sum2);

for循环小结

今天关于for循环,我们学习这几个案例就够了,重点还是掌握for循环的执行流程。在以后,我们还会经常用到for循环,用多了,你就会越来越熟悉了。但是在具体场景下,还是需要具体问题具体分析。


2.3 while循环——格式和流程

各位同学,接下来我们学习第二种循环结构——while循环。

我们先来认识一下while循环长什么样子,然后按照格式写一个while循环的基础案例

1661141338265

// 需求:打印5行Hello World
int i = 0;
while (i < 5) {
   
    // i = 0 1 2 3 4
    System.out.println("Hello World");
    i++;
}

代码的执行流程如下图所示:按照① ②③④ ②③④ ... 的流程执行

如果②步骤为true,才循环执行③④步骤

如果②步骤为false,则循环结束

1661141996444

1661141867092

for、while如何选择

学到这里,细心的同学可能会发现while循环和for循环的执行流程是一样的。那他们是不是可以通用呢?

  • 从功能来说:能够用for循环做的,都能用while循环做。

  • 使用规范上来说:知道循环几次,建议使用for;不知道循环几次建议使用while

2.3 while循环案例——折纸案例

各位同学,上一节我们已经学习了while循环的基本使用。下面我们通过一个案例再将while循环的使用巩固一下,主要目的还是想让大家知道什么使用while循环来完成需求。

案例需求如下:

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

我们来分析一下该怎么做

分析:首先由于不知道折叠多少次,我们可以选择用while循环
    1)纸张的初始化厚度为0.1毫米,珠峰的高度为8848860毫米
        double peakHeight = 8848860;
        double paperThickness = 0.1;
    2)每次折叠纸张的厚度为原来的两倍,这是需要循环执行的
        while(纸张厚度<8848860){
   
            纸张厚度*=2;
        }
    3)需要求折叠的次数,可以用一个变量来记录折叠的次数
        int 次数 = 0;
        while(纸张厚度<8848860){
   
            纸张厚度*=2;
            次数++; //每次折叠次数累加
        }
    结果:等循环结束之后,打印记录次数的值,就是折叠多少次了。

按照上面分析的思路把代码写出来

// 1、定义变量记住珠穆朗玛峰的高度和纸张的高度。
double peakHeight = 8848860;
double paperThickness = 0.1;

// 3、定义一个变量count用于记住纸张折叠了多少次
int count = 0;

// 2、定义while循环控制纸张开始折叠
while (paperThickness < peakHeight) {
   
    // 把纸张进行折叠,把纸张的厚度变成原来的2倍。
    paperThickness = paperThickness * 2;
    count++;
}
System.out.println("需要折叠多少次:" + count);
System.out.println("最终纸张的厚度是:" + paperThickness);

2.4 do-while循环——格式和流程

各位同学,接下来我们学习循环结构的第三种格式——do-while循环。

们先来认识一下while循环长什么样子,然后按照格式写一个while循环的基础案例。

1661143715539

如下图所示:do-while循环的执行流程,是按照① ②③④ ②③④... 的顺序执行的。

我们会发现,do-while循环的特点是先执行,再判断的。即使条件不成立,也会先执行一次。

1661143856132

下面我们把三种循环的区别给同学们总结一下

1. for循环 和 while循环(先判断后执行); 
   do...while (先执行后判断)

2.for循环和while循环的执行流程是一模一样的,
    功能上无区别,for能做的while也能做,反之亦然。
    如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。

3 for循环中控制循环的变量只在循环中使用
  while循环中,控制循环的变量在循环后还可以继续使用

2.6 死循环

同学们在写代码时,可能一不小心把代码写成了死循环,所谓死循环就是停不下来的循环。

接下来,带着同学们认识几种死循环的写法。然后再说一下死循环有什么用。

//for死循环
for ( ; ; ){
   
    System.out.println("Hello World1");
}

//while死循环
while (true) {
   
    System.out.println("Hello World2");
}

//do-while死循环
do {
   
    System.out.println("Hello World3");
}while (true);

死循环有什么应用场景呢?

最典型的是可以用死循环来做服务器程序, 比如百度的服务器程序就是一直在执行的,你随时都可以通过浏览器去访问百度。如果哪一天百度的服务器停止了运行,有就意味着所有的人都永不了百度提供的服务了。

对于这样的应用我们目前了解一下就可以了。对于目前来说我们只要知道代码格式该怎么写,能达到什么效果就行。

2.8 循环嵌套

各位同学,接下来我们学习一种在实际工作中很常用的循环形式——循环嵌套。

所谓循环嵌套,就是一个循环中又包含另一个循环(就是同学们常说的,套娃^_^),下面我们通过案例代码演示一下。

1661145140910

循环嵌套执行流程:外部循环每循环一次,内部循环会全部执行完一轮。

i=0; i<3true; 进入循环
    //j的取值从0到5,执行一轮,打印5次"我爱你"
    for(int j = 1; j <= 5; j++) {
   
       System.out.println("我爱你:" + i);
    }
    内层循环执行完之后,执行外层的i++; i的值1

i=1时:i<3true; 进入循环
    //j的取值从0到5,又执行一轮,打印5次"我爱你"
    for(int j = 1; j <= 5; j++) {
   
       System.out.println("我爱你:" + i);
    }
    内层循环执行完之后,执行外层的i++; i的值2

i=2时:i<3true; 进入循环
    //j的取值从0到5,再执行一轮,打印5次"我爱你"
    for(int j = 1; j <= 5; j++) {
   
       System.out.println("我爱你:" + i);
    }
    内层循环执行完之后,执行外层的i++; i的值3

i=3时:i<3false; 外层循环结束

理解问循环嵌套的执行流程之后,我们再写一个案例来巩固一下

需求:在控制台使用 * 打印出45列的矩形
    ****
    ****
    ****
    ****
//1)先写一个循环用来在一行中打印5个"*"
for (int j = 1; j <= 5; j++) {
   
    System.out.print("*"); // 不换行
}
System.out.println(); //换行


System.out.println("-----------------");

//2)再将第一步的代码套一层循环,执行4次,就可以打印4行
for (int i = 1; i <= 4; i++) {
   
    for (int j = 1; j <= 5; j++) {
   
        System.out.print("*"); // 不换行
    }
    System.out.println(); //换行
}

总结一下,对于嵌套循环重点理解这句话:外部循环每循环一次,内部循环会全部执行完一轮。

2.9 跳转语句 break 、continue

前面我们学习了循环结构,在中间我们还接触了死循环的一些形式,那么我想要在循环过程中提前跳出循环怎么做呢?

这里就需要用到跳转语句,需要用到breakcontinue两个关键字。我们先来认识一下这两个关键字的作用

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

案例1:演示break的使用,提前终止循环的执行

// 1、break:跳出并结束当前所在循环的执行。
// 场景:假如你又有老婆了,你犯错了,你老婆罚你说:5句我爱你
// 说到第三句的时候心软了,让你别再说了。
for (int i = 1; i <= 5; i++) {
   
    System.out.println("我爱你:" + i);
    if(i == 3){
   
        // 说明已经说完了第三句了,心软了。
        break; // 跳出并结束当前所在循环的执行。
    }
}

案例2:演示continue的使用,结束循环中的一次,继续下一次循环

// 2、continue:跳出当前循环的当次执行,直接进入循环的下一次执行。
// 场景: 假如你有老婆,你犯错了,你老婆罚你洗碗5天。
// 第三天的时候,你表现很好,第三天不用洗碗,但是不解恨,第四天还是要继续的。
for (int i = 1; i <= 5; i++) {
   
    if(i == 3) {
   
        // 已经到了第三天,第三天不用洗的。
        continue;
    }
    System.out.println("洗碗:" + i);
}

需要注意的是break和continue不是任何地方都可以使用的

1661146324812

1661146405314


2.10 循环结构总结

到这里关于循环结构的所有内容就都已经学习完了,我们再把几种循环结构在什么场景下使用,再总结一下。

1. 什么是流程控制
    答:流程控制是用来控制程序的执行顺序的

2. 分支结构ifswitch,如何选择?
    答:if分支:一般用于对一个范围进行判断
        switch分支:对一个一个值进行匹配

3. for循环和while循环、do-while如何循环
    答:知道循环次数用for、不知道循环次数用while
       想要先执行,再判断,用do-while
相关文章
|
1月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
2月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
15天前
|
小程序 前端开发 算法
|
20天前
|
Java API 开发者
Java如何实现企业微信审批流程
大家好,我是V哥。本文分享如何在企业微信中实现审批流程,通过调用企业微信的开放API完成。主要内容包括获取Access Token、创建审批模板、发起审批流程和查询审批结果。提供了一个Java示例代码,帮助开发者快速上手。希望对你有帮助,关注V哥爱编程,编码路上同行。
|
23天前
|
SQL IDE Java
入门Cloud Toolkit:简化你的Java应用开发与部署流程
【10月更文挑战第19天】作为一名长期从事Java开发的程序员,我一直致力于寻找能够简化日常开发工作的工具。在众多工具中,阿里巴巴推出的Cloud Toolkit引起了我的注意。这款免费的插件旨在帮助开发者更轻松地进行开发、测试及部署工作,尤其是在与云服务交互时表现尤为出色。本文将从个人的角度出发,介绍Cloud Toolkit的基本功能及其使用技巧,希望能帮助初学者快速上手这款实用工具。
18 1
|
27天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
41 2
|
30天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
1月前
|
前端开发 安全 Java
java发布公告的实现流程
构建一个Java公告发布系统涉及到前端界面设计、后端业务逻辑处理、数据库设计与交互、安全性保障等多个环节。通过采用现代的开发框架和最佳实践,可以高效地开发出既安全又易于维护的系统。随着需求的增长,系统还可以进一步扩展,比如增加评论功能、通知订阅、多语言支持等。
29 1
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
35 1
|
1月前
|
运维 Cloud Native Java
Java项目部署的发展流程
本文介绍了四种不同的应用部署方式:传统部署、虚拟化部署、容器化部署和云原生部署。每种方式的特点、部署流程及优缺点进行了详细说明。传统部署直接在物理机上运行应用,存在资源利用率低和运维成本高的问题;虚拟化部署通过虚拟机实现资源隔离和复用,但有性能损失和单点故障风险;容器化部署则提供轻量级、可移植的应用环境,具备良好的隔离性和一致性;云原生部署结合了容器化和微服务架构,实现高效运维和灵活扩展。
Java项目部署的发展流程