关于java循环结构for

关于java循环结构for

在上一篇文章中,我们了解到了while和do…while的结构以及用法,这篇文章我们主要学习一下最常用的循环结构,for结构😀,这个结构理解起来相对while结构会难一些,本篇文章内容会很多,一起了解for的细节和过程,所以要多去思考,反复观看,反复练习。

关于java循环结构while和do…while

for循环

  • 虽然所有循环结构都可以用while和do…while表示,但是java中提供了另一种结构,叫做for结构。
  • for结构使一些循环变的简单。
  • for循环结构是支持迭代的一种通用结构,是最有效,最灵活的循环结构。
  • for循环结构使用方式:
for(初始化;布尔表达式;迭代)//英文分号间隔
{//需要执行的循环语句
}
  • for循环结构实例说明:

我们输出1-100,之前使用的是while,现在用for循环来实现😎

public class Demo
{public static void main(String[] args){// 初始化;布尔表达式;迭代 for(int i=0; i<=100; i++){System.out.println(i);}}
}

我们执行上述的代码,可以看到,输出的结果和while是一样的。

0
1
2
3
...
100进程结束...

我们来对比一下while和for,可以更好的理解for和什么是迭代。

迭代

public class Demo
{public static void main(String[] args){int a=0;//初始化while(a<=100)//布尔条件{System.out.println(a);a++;//迭代  a=a+1         }System.out.println("=============")//初始化;布尔表达式;迭代   for(int i=0; i<=100; i++){System.out.println(i);}}
}

我们运行上面的代码,结果是一样的,所以迭代就是更新,像a++一样递增或者递减等。

0
1
2
3
...
100
=======
0
1
2
3
...
100进程结束....

理解for循环执行步骤

  • 第一步,执行初始化,可以声明一种类型,可以初始化一个或者多个循环控制变量,也可以是空白的。

    空白的就是我们for循环中的死循环

public class Demo
{public static void main(String[] args){//空白的for(;;){}}
}
  • 第二步,去检测布尔表达式的值,如果为true,执行循环,如果为false,循环终止,开始执行循环后边的语句。

  • 第三步,执行一次循环以后,更新循环控制变量(迭代控制变量是增还是减)。

  • 最后,重复执行,检测布尔值,循环上面的过程。

实战练习

  • 题目一:用while或for循环输出1-300之间能被5整除的数,并且每行输出3个。
    首先我们把题目分解:

1、利用while循环,第一步初始化一个int类型的变量,值为0。

2、被5整除,就是除以5余数是0,要对数字进行判断,所以我们要用到之前学习过的%运算符和if选择结构。

3、我们打印用的是println(),这里正好了解print(),println是自动换行,print是将结果都输出在一行。

4、如果都输出在一行,需要用到我们之前学习过的转义符\t,来产生间隔,然后用\n换行。

5、每行输出三个,其实理解过来就是,一行输出三个数字,到三个数字的时候需要换行输出。

6、我们在使用开发工具Idea的时候,有很多快捷方式,比如写出300.for,回车直接可以自动生成结构,下面用for,我们这里先用while循环来实现题目。

 public class Demo {public static void main(String[] args) {int a=0;//初始化while (a<=300)//布尔表达式判断{a++;//迭代if (a%5==0)//除以5余数是0{System.out.print(a+"\t");//输出所有符合条件的数写在一行,并用\t(tab键)间隔开//完成这步的时候,将所有符合除以5等于0的数,都输出在一行并间隔开。}if (a%(5*3)==0)//这里稍微绕一些,所以要反复理解{System.out.print("\n");//换行}}}}

我们在上面看到了a%(5*3)==0,其实转变思维一下,题目的要求是输出三个换行,也就是说,当这个数字,除以15余数为0的时候,需要换行,大家看一下输出的结果就可以理解上去了,如果这个数是15,15除以15余数是0,所以到15的时候,满足一行是三个。

 5	10	15	20	25	30	35	40	45	50	55	60	65	70	75	80	85	90	95	100	105	110	115	120	125	130	135	140	145	150	155	160	165	170	175	180	185	190	195	200	205	210	215	220	225	230	235	240	245	250	255	260	265	270	275	280	285	290	295	300	进程结束......

我们上面用的是while循环来实现的需求,我们下面来看一下for循环的实现。

 public class Test {public static void main(String[] args) {for (int i = 1; i <= 300; i++){if (i%5==0){System.out.print(i+"\t");}if (i%(5*3)==0){System.out.print("\n");}}}}

我们执行一下,发现输出的是一样的,但是这里注意,因为是每行输出三个,所以要抛出0,因为0输出的是一行一个。

 5	10	15	20	25	30	35	40	45	50	55	60	65	70	75	80	85	90	95	100	105	110	115	120	125	130	135	140	145	150	155	160	165	170	175	180	185	190	195	200	205	210	215	220	225	230	235	240	245	250	255	260	265	270	275	280	285	290	295	300	进程结束......
  • 用for循环输出九九乘法表。

    首先拿到需求,我们还是要讲需求分解。

1、九九乘法表是一个直角形状的。

在这里插入图片描述

2、我们要按照这个样式去实现,首先应该想办法输出第一列。

3、然后将固定的东西,经过循环的嵌套来实现,循环的嵌套就是可以在循环里面再循环😀。

4、我们用代码一步一步去分析,光看文字的话可能对于理解来说是比较困难的。

第一步:输出第一列
public class Demo {public static void main(String[] args) {//输出第一列从1-9,所以要用条件<=9//i=1初始化为1//第一步:i=1的时候,输出的是1*1=1 执行迭代//第二步:i=i+1=2,输出的是1*2=2 执行迭代for (int i = 1; i <= 9; i++){System.out.println(1+"*"+i+"="+(1*i));//拼出要输出的样式}}
}

这样,我们完成了第一列的打印,输出的结果为

1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9进程结束......
第二步:嵌套循环

我们可以看到,刚刚输出的字符串里面,我们只是输出了第一列,所以直接写的固定值1。

System.out.println(1+"*"+i+"="+(1*i));

这里面第一个1,我们后边就用不到了,所以要把这个1,变成一个变量,让它去循环变化,所以,我们要在这个for循环的外层,再套一层for循环,用于将1这个固定值,变成一个根据循环变化的量。

public class Demo {public static void main(String[] args){for (int j = 1; j <= 9; j++) {for (int i = 1; i <= 9; i++){System.out.println(j+"*"+i+"="+(j*i));}}}
}

我们在外层嵌套了一层,变量名字设置为j(可任意),然后我们将这个变量j,把刚刚输出语句的1进行替换,这样就把1 * 1 = 1第一个数字,变成了一个变量,但是这样运行呢,我们会发现一个问题,就是有重的,比如1 * 9 =9 和 9 * 1 = 1。

1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27
4*1=4
4*2=8
4*3=12
4*4=16
4*5=20
4*6=24
4*7=28
4*8=32
4*9=36
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
6*7=42
6*8=48
6*9=54
7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49
7*8=56
7*9=63
8*1=8
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64
8*9=72
9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81进程结束......

我们执行完以后,仔细观察一下,就会发现有很多重复项,所以我们要进行去重。

第三步:去重

我们为什么会出现刚刚的那种问题,是因为我们在第二个循环中,也把一个值,写死了,这个值就是里面循环中的9🤔

public class Demo {public static void main(String[] args){for (int j = 1; j <= 9; j++) {for (int i = 1; i <= 9; i++)//i<=9,因为这个9没有根据外部循环中的变量进行变化,所以一直在增加。{System.out.println(j+"*"+i+"="+(j*i));}}}
}

​ 上述的九九乘法表中,我们可以发现,是一个直角形状的,外部循环中的 j 是不断在变大的,从1一直循环到9,但是如果我们内部的 循环 i 也是在一直变大,也是从1一直循环到9,所以导致了有重复的项。

解决办法:这里,我们只需要,让 j 变大的同时 i 减小,就可以实现去重了。

public class Demo {public static void main(String[] args){for (int j = 1; j <= 9; j++) {for (int i = 1; i <= j; i++)//把9换成j{System.out.println(j+"*"+i+"="+(j*i));}}}
}
过程分析

我们可以在输出语句System前面打一个断点

​ 我用的工具是Idea,断点的作用就是可以卡在当前位置,不要点击运行,要点击编译,然后按F8,去看一步一步的走向😀,对于修补 程序bug,数据分析都是非常有意义的。

​ 我们打好断点以后,就可以看到如下提示,当 j =1 的时候,i = 1 ,输出的结果是1 * 1=1。

在这里插入图片描述

我们按F8向下运行,就可以看到,

j 通过迭代,变成了2,

i 还是初始化的1,1<=2,

所以先执行2 * 1=2,

然后 i 进行迭代 i=i+1=1+1=2,

i 的值,目前是2,2<=2,所以输出2 * 2=4,

然后 i 再次进行迭代,i=i+1=2+1=3,

i 的值,目前是3,3<=2是不成立的,所以退出循环,j 进行迭代…

在这里插入图片描述

依次类推,这回我们可以发现,运行以后没有重复的项了,最后一步,我们就是调整样式,让他变为一个直角形状😊。

第四步:样式调整
public class Test {public static void main(String[] args){for (int j = 1; j <= 9; j++){for (int i = 1; i <= j; i++){System.out.print(j+"*"+i+"="+(j*i)+"\t");//先将所有的都输出在一行,用\t隔开}System.out.print("\n");//循环结束,换行}}
}

这样就可以实现我们的九九乘法表了,在里面循环不满足条件的时候,比如刚刚的3<=2是不成立的,所以退出循环,退出循环后,换行,就是 1 * 2 =2 2 * 2 = 4 输出结束,进行换行,就跳到了下一行,我们运行一下,看看输出的结果😀。

1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	进程结束......

增强for循环

  • 在这里我们先介绍一下增强for循环,多用于集合和数组,我们以后的文章会说到。
  • Java5引入了一种主要用于数组或集合的增强型for循环。
  • 增强for循环使用方法:
for(声明语句:表达式)
{//执行循环的代码
}
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
  • 增强for循环实例说明:
public class Demo {public static void main(String[] args){int[] numbers={10,20,30,40,50};//定义数组//遍历数组中的元素for (int x:numbers){System.out.println(x);}}
}
  • 我们用for循环来实现一下上述的代码。
public class Demo {public static void main(String[] args){int[] numbers={10,20,30,40,50};for (int i=0;i<5;i++){System.out.println(numbers[i]);}}
}

我们运行以后,可以发现,通过循环,将数组里面的元素都按顺序取了出来。

10
20
30
40
50进程结束.....

以上就是for循环的内容,内容非常的多,大家可以点赞收藏反复的观看理解,多去写代码去操作,只有多写才能理解透彻😀。

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

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

相关文章

苹果CMS超级播放器专业版无授权全开源,附带安装教程

源码介绍 超级播放器专业版v1.0.8&#xff0c;内置六大主流播放器&#xff0c;支持各种格式的视频播放&#xff0c;支持主要功能在每一个播放器内核中都相同效果。 搭建教程 1.不兼容IE浏览器 2.php版本推荐7.4 支持7.1~7.4 3.框架引入不支持同时引入多个播放器 json对接教…

大数据毕业设计:旅游景点数据爬虫大屏实时监控系统✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

SpringBoot整合Canal

一 linux docker compose版本 1.第一步&#xff1a;基础环境 &#xff08;1&#xff09;第1步&#xff1a;安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…

CEC2017(Python):五种算法(DE、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、差分进化算法DE 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem defini…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率&#xff08;C&#xff09; …

亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织的第七届大数据“星河&#xff08;Galaxy&#xff09;”案例评选结果公示&#xff0c;亚信安慧AntDB数据库两项目入选&#xff0c;其中“基于Ant…

【滑动窗口】C++算法:K 个不同整数的子数组

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCoe992 K 个不同整数的子数组 给定一个正整数数组 nums和一个整数 k&#xff0c;返回 nums 中 「好子数组」 的数目。 如果 nums 的某个子数组中不同整数的个数恰好为 …

selenium模块有哪些用途?

Selenium模块是一个用于Web应用程序测试的模块&#xff0c;具有多种示例用法。以下是一些示例&#xff1a; 1.打开网页并执行一些基本操作&#xff0c;如点击按钮、输入文本等。 定位网页元素并执行操作&#xff0c;例如使用 find_element 方法查找单个元素&#xff0c;使用 f…

weston 源码下载及编译

文章目录 前言一、安装 meson1. ubuntu 上安装pip32. 使用pip3安装meson3. 安装 ninja二、获取weston 源码三、编译 weston 源码1. meson build2. ninja -C build3. 安装编译生成的weston四、执行编译生成的weston总结参考资料前言 本文主要介绍 weston 9.0源码的下载和编译,…

网大为卸任腾讯CXO;Midjourney 1 月训练视频模型;2023年马斯克赚了7700亿

投融资 • 2023 年大型科技公司在生成式 AI 初创企业上的投资远超风险投资集团• 恒信东方与无锡政府合作成立布局 MR/XR 技术及 3D 数字资产 AIGC 产业投资基金• 新公司法完善注册资本认缴登记制度• 网大为卸任腾讯CXO&#xff0c;曾促成南非MIH的投资• 宁波蔚孚科技完成数…

常用环境部署(十二)——Redis搭建主从模式(一主一从)

一、主从服务器Redis安装 1、注意事项 主从服务器Redis尽量安装同一版本&#xff0c;避免兼容性造成的一些错误产生 2、Centos安装Redis 链接&#xff1a;​​​​​​常用环境部署(十)——MySQL主从同步数据搭建(一主一从)-CSDN博客 二、 主Redis配置 1、修改主Redis配置…

ESP32S3+HX8347+3线SPI运行LVGL例程

一、clone lv_port_esp32到本地 git clone https://github.com/lvgl/lv_port_esp32.git 二、增加hx8347.c、hx8347.h components\lvgl_esp32_drivers\lvgl_tft下新增2个文件&#xff1a;hx8347.c、hx8347.h。因为lv_port_esp32中没有hx8347的驱动&#xff0c;需要自己写。这两个…