关于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.rhkb.cn/news/227075.html

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

相关文章

Linux LVM逻辑卷

一、LVM的定义 LVM 是 Logical Volume Manager 的简称&#xff0c;译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备&#xff0c;并允许用户动态调整文件系统的大小。此外&#xff0c;LVM 的快照功能可以帮助我们快速备份数据。LVM 为…

L1-072:刮刮彩票

题目描述 刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示&#xff1a; 每次游戏玩家会拿到一张彩票&#xff0c;上面会有 9 个数字&#xff0c;分别为数字 1 到数字 9&#xff0c;数字各不重复&#xff0c;并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个…

【ArkTS入门】ArkTS开发初探:语言特点和开发特点

什么是ArkTS&#xff1f; ArkTS是一个为鸿蒙组件而生的框架&#xff0c;语法亲人好用。基于TypeScript&#xff0c;ArkTS拓展了声明式UI、状态管理等的能力&#xff0c;从本质上来讲&#xff0c;是TypeScript的扩展&#xff0c;主要服务于前端。 ArkTS的开发可以满足“一次开…

Python列表的介绍与操作 增改查,连接,赋值,复制,清空

列表 在日常中我们通过给变量赋值来存储数据,比如 a "hello" b "world" c "你好啊" d "....."由于变量一次只能存储一个数据,但我们如果想一次存储多个数据,的话这样存储会很复杂,所以,我们可以通过列表 列表(List)是Python中的…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1&#xff1a;获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段&#xff0c;只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表&#xff0c;获取学生对应班级…

隐身之术:深入解析代理模式的神秘力量

一、定义 代理模式&#xff08;Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问,属于结构型模式。 二、解决什么问题 主要解决在直接访问对象时带来的问题&#xff0c;比如说&#xff1a;要访问的对象在远程的机器上。在面向对象系统中&#xff0c;有些对象由于…

一篇文章深入认识微服务SpringCloud和Dubbo的区别

1、SpringCloud是什么 SpringCloud, 基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注册与发现&#xff0c;配置中心&#xff0c;全链路监控&#xff0c;服务网关&#xff0c;负载均衡&#xff0c;熔断器等组件&#xff0c;除了基于NetFlix的开源组件做高度抽象…

Conda:Python环境管理的瑞士军刀

在数据科学和机器学习的世界中&#xff0c;管理各种库和依赖关系的重要性不容忽视。Conda 就是为此而生的强大工具。本文将深入探讨 Conda 的简介、功能以及使用示例&#xff0c;帮助你更好地理解和使用这个工具。 Conda 简介 Conda 是一个开源的包管理系统和环境管理系统&am…

新品出击 | 软网关BLIoTLink免费发布

新品出击|软网关BLIoTLink免费发布 BLIoTLink是一款免费的物联网协议转换软件&#xff0c;可以部署在任何基于Linux OS的系统&#xff08;Linux、Debian、Ubuntu、FreeRTOS、RT-Thread&#xff09;中&#xff0c;使用灵活&#xff0c;可以实现数据的采集以及接入网络平台。 BL…

0开始配置Cartographer建图和导航定位

0开始配置Cartographer 日期&#xff1a;12-19 硬件&#xff1a;激光雷达IMU 小车的tf变换&#xff1a; 建图配置 lua文件配置&#xff1a;my_robot.lua include "map_builder.lua" include "trajectory_builder.lua"options {map_builder MAP_BUILDE…

HarmonyOS page生命周期函数讲解

下面 我们又要看一个比较重要的点了 页面生命周期 页面组件有三个生命周期 onPageShow 页面显示时触发 onPageHide 页面隐藏时触发 onBackPress 页面返回时触发 这里 我们准备两个组件 首先是 index.ets 参考代码如下 import router from ohos.router Entry Component struc…

Python FastApi连接oracle进行查询

这边技术选型是cx_oracle进行连接查询&#xff0c;cx_oracle的使用首先要有官方的客户端才能连接到数据库&#xff0c;python并不自带客户端。我用是Python3.9 安装客户端 可以到官网在选择最新版进行下载。 Instant Client for Microsoft Windows (x64) 64-bit 或者直接从我…

HBase深度历险 | 京东物流技术团队

简介 HBase 的全称是 Hadoop Database&#xff0c;是一个分布式的&#xff0c;可扩展&#xff0c;面向列簇的数据库&#xff0c;是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。本文会像剥洋葱一样&#xff0c;层层剥开她的心。 特点 首先我…

【机器学习】深度学习概论(二)

五、受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine&#xff0c;RBM&#xff09; 5.1 RBM介绍 示例代码&#xff1a; Python 编写了一个简单的 RBM 实现&#xff0c;并用一些假数据训练了它。然后&#xff0c;他展示了如何用 RBM 来解释用户的电影偏好&#xff0c;以…

MySQL MVCC精讲

版本链 我们前面说过&#xff0c;对于使用InnoDB存储引擎的表来说&#xff0c;它的聚簇索引记录中都包含两个必要的隐藏列&#xff08;row_id并不是必要的&#xff0c;我们创建的表中有主键或者非NULL的UNIQUE键时都不会包含row_id列&#xff09;&#xff1a; trx_id&#xff…

[ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择

文章目录 一、前言二、Amazon SNS 服务&#xff08;Amazon Simple Notification Service&#xff09;三、Amazon SQS 服务&#xff08;Amazon Simple Queue Service&#xff09;四、SNS 与 SQS 的区别&#xff08;本文重点&#xff09;4.1 基于推送和轮询区别4.2 消费者数量对应…

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台&#xff0c;可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架&#xff0c;只要计算框架实现了 YARN 所定义的 接口&#xff0c;都可以运行在这套通用的 Hadoop 资源管理和任务调…

[足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 课程链接 &#xff1a; https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch12 Robotic …

uni-appcss语法

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

PPT录制视频的方法,轻松提升演示效果!

在现代工作和学习中&#xff0c;ppt是一种常见的演示工具&#xff0c;而将ppt转化为视频形式更能方便分享和传播。本文将介绍两种ppt录制视频的方法&#xff0c;每一种方法都将有详细的步骤和简要的介绍&#xff0c;通过这些方法&#xff0c;你可以轻松将ppt制作成视频&#xf…