for循环倒序java_for循环-程序员宅基地

技术标签: for循环倒序java  

除了while和do while循环,Java使用最广泛的是for循环。

for循环的功能非常强大,它使用计数器实现循环。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。计数器变量通常命名为i。

我们把1到100求和用for循环改写一下:

// for

----

public class Main {

public static void main(String[] args) {

int sum = 0;

for (int i=1; i<=100; i++) {

sum = sum + i;

}

System.out.println(sum);

}

}

在for循环执行前,会先执行初始化语句int i=1,它定义了计数器变量i并赋初始值为1,然后,循环前先检查循环条件i<=100,循环后自动执行i++,因此,和while循环相比,for循环把更新计数器的代码统一放到了一起。在for循环的循环体内部,不需要去更新变量i。

因此,for循环的用法是:

for (初始条件; 循环检测条件; 循环后更新计数器) {

// 执行语句

}

如果我们要对一个整型数组的所有元素求和,可以用for循环实现:

// for

----

public class Main {

public static void main(String[] args) {

int[] ns = { 1, 4, 9, 16, 25 };

int sum = 0;

for (int i=0; i

System.out.println("i = " + i + ", ns[i] = " + ns[i]);

sum = sum + ns[i];

}

System.out.println("sum = " + sum);

}

}

上面代码的循环条件是i

思考:如果把循环条件改为i<=ns.length,会出现什么问题?

注意for循环的初始化计数器总是会被执行,并且for循环也可能循环0次。

使用for循环时,千万不要在循环体内修改计数器!在循环体中修改计数器常常导致莫名其妙的逻辑错误。对于下面的代码:

// for

----

public class Main {

public static void main(String[] args) {

int[] ns = { 1, 4, 9, 16, 25 };

for (int i=0; i

System.out.println(ns[i]);

i = i + 1;

}

}

}

虽然不会报错,但是,数组元素只打印了一半,原因是循环内部的i = i + 1导致了计数器变量每次循环实际上加了2(因为for循环还会自动执行i++)。因此,在for循环中,不要修改计数器的值。计数器的初始化、判断条件、每次循环后的更新条件统一放到for()语句中可以一目了然。

如果希望只访问索引为奇数的数组元素,应该把for循环改写为:

int[] ns = { 1, 4, 9, 16, 25 };

for (int i=0; i

System.out.println(ns[i]);

}

通过更新计数器的语句i=i+2就达到了这个效果,从而避免了在循环体内去修改变量i。

使用for循环时,计数器变量i要尽量定义在for循环中:

int[] ns = { 1, 4, 9, 16, 25 };

for (int i=0; i

System.out.println(ns[i]);

}

// 无法访问i

int n = i; // compile error!

如果变量i定义在for循环外:

int[] ns = { 1, 4, 9, 16, 25 };

int i;

for (i=0; i

System.out.println(ns[i]);

}

// 仍然可以使用i

int n = i;

那么,退出for循环后,变量i仍然可以被访问,这就破坏了变量应该把访问范围缩到最小的原则。

灵活使用for循环

for循环还可以缺少初始化语句、循环条件和每次循环更新语句,例如:

// 不设置结束条件:

for (int i=0; ; i++) {

...

}

// 不设置结束条件和更新语句:

for (int i=0; ;) {

...

}

// 什么都不设置:

for (;;) {

...

}

通常不推荐这样写,但是,某些情况下,是可以省略for循环的某些语句的。

for each循环

for循环经常用来遍历数组,因为通过计数器可以根据索引来访问数组的每个元素:

int[] ns = { 1, 4, 9, 16, 25 };

for (int i=0; i

System.out.println(ns[i]);

}

但是,很多时候,我们实际上真正想要访问的是数组每个元素的值。Java还提供了另一种for each循环,它可以更简单地遍历数组:

// for each

----

public class Main {

public static void main(String[] args) {

int[] ns = { 1, 4, 9, 16, 25 };

for (int n : ns) {

System.out.println(n);

}

}

}

和for循环相比,for each循环的变量n不再是计数器,而是直接对应到数组的每个元素。for each循环的写法也更简洁。但是,for each循环无法指定遍历顺序,也无法获取数组的索引。

除了数组外,for each循环能够遍历所有“可迭代”的数据类型,包括后面会介绍的List、Map等。

练习1

给定一个数组,请用for循环倒序输出每一个元素:

// for

----

public class Main {

public static void main(String[] args) {

int[] ns = { 1, 4, 9, 16, 25 };

for (int i=?; ?; ?) {

System.out.println(ns[i]);

}

}

}

练习2

利用for each循环对数组每个元素求和:

// for each

----

public class Main {

public static void main(String[] args) {

int[] ns = { 1, 4, 9, 16, 25 };

int sum = 0;

for (???) {

// TODO

}

System.out.println(sum); // 55

}

}

练习3

圆周率π可以使用公式计算:

\frac{\mathrm\pi}4=1-\frac13+\frac15-\frac17+\frac19-\dots

请利用for循环计算π:

// for

----

public class Main {

public static void main(String[] args) {

double pi = 0;

for (???) {

// TODO

}

System.out.println(pi);

}

}

小结

for循环通过计数器可以实现复杂循环;

for each循环可以直接遍历数组的每个元素;

最佳实践:计数器变量定义在for循环内部,循环体内部不修改计数器;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28869649/article/details/114432495

智能推荐

2023年互联网地图测绘资质怎么办理?-程序员宅基地

文章浏览阅读119次。互联网地图测绘甲级资质的人员是所有测绘资质专业甲级里面要求最少的,甲级资质只需要20人,测绘中级技术人员2人,18个地图制图或者计算机类的专业技术人员。,而乙级资质也只需要12个技术人员,其中只需要1个测绘主专业中级人员,11个地图制图或者计算机类的专业技术人员。专业的事情应该交给专业的人来做,可以帮助企业最快速度,最安全最节省成本的方式把测绘资质顺利办理下来,全国各个地区测绘资质办理尽有不同之处,有想要深入了解测绘资质办理的朋友可留言探讨沟通哦!3、有与从事的测绘活动相适应的技术装备和设施;

socket.io学习笔记,含简易聊天室demo代码_socket.io核心代码-程序员宅基地

文章浏览阅读168次。nodejs后端:npm install socket.iovue前端:npm i vue-socket.io -Snpm i socket.io-client -Snodejs:前端:事件触发on接收事件,第一个参数是event,第二个参数是回调函数emit触发事件,第一个参数是event,第二个参数是事件参数connection:连接的时候自动触发disconnect:断开连接的时候自动触发chat message(随便自定义的名称):点对点通信事件,回调函数里有参数msg(收到的消息)_socket.io核心代码

JavaScript 时间戳转换为日期时间_js unix时间戳转换成时间-程序员宅基地

文章浏览阅读222次。在 JavaScript 中,我们经常需要将时间戳(Unix 时间戳)转换为可读的日期时间格式。时间戳是一个表示从 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)开始经过的秒数或毫秒数。在本文中,我将向您展示如何使用 JavaScript 将时间戳转换为日期时间,并给出相应的源代码示例。_js unix时间戳转换成时间

社区分享|企业BI选型:从Quick BI、Superset到DataEase_superset dataease-程序员宅基地

文章浏览阅读241次。从产品使用者到产品贡献者的转变。_superset dataease

程序员考试补课笔记-第十八天_[说明] 设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表-程序员宅基地

文章浏览阅读3.1k次。  什么都不用说了,马上入正题(免得给人说我口水多了,哈哈)。那么今天学了些什么呢?知识当然每天都要吸收,但在乎吸收得多少。有时候一个看起来的小问题,其实足可以引发另一些问题,这一切都是靠自己,看自己怎么对待这些问题。  我们现在来做一道初程的题目,大家也不要看少初程的题喔,其实这题我在中程的试题来看到过,不过不同的地方只是把它改为用指针了。所以这里也想说说,其实中程里绝大部份的题都是_[说明] 设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表

随便推点

「PHP系列」PHP echo/print语句、数据类型详解_php中echo和print都用于在( )输出数据,而<?=……?>常用于给( )进行赋值。-程序员宅基地

文章浏览阅读1.6k次,点赞39次,收藏25次。echo/print语句、数据类型_php中echo和print都用于在( )输出数据,而常用于给( )进行赋值。

C#从入门到精通:一场深入浅出的编程之旅【文末送书】-程序员宅基地

文章浏览阅读6.2k次,点赞72次,收藏12次。在当今数字化的时代,编程已经成为一项至关重要的技能。而在众多编程语言中,C#(C Sharp)因其强大的功能和广泛的应用领域而备受青睐。本文将带领读者从入门到精通,探索C#编程语言的奥秘,助力读者在编程的道路上踏出坚实的步伐。

fgo升级经验计算机,命运冠位指定FGO升级所需经验值介绍-程序员宅基地

文章浏览阅读2.9k次。新号很多dalao都建议我们搞个初始号,这个确实很主要。因为很长一段时间我们都不会有什麼好的卡入手,靠着一堆非洲战神开局完全是折磨自己真的。我个人的感觉是初始号有一个孔明最好,预约一般都有一个B叔,前期一路砍过去就行了。孔明真是非常好用,真的和攻略写的一样有了孔明用习惯了让你去玩没有孔明的号你会非常难受。好友里面大腿多归多,但是满破宝石的我至今也没见过几个,有了孔明爸爸会让你觉得这个游戏前期非常轻..._fgo升级计算器

基于正交偶极子的四元数MUSIC算法及其Matlab代码_matlab 空间谱 极化-程序员宅基地

文章浏览阅读1k次,点赞23次,收藏18次。本文介绍了空间谱估计中的信源数估计、MUSIC算法、正交偶极子的MUSIC算法、极化参数估计的谱峰搜索法、模值约束法和四元数MUSIC算法,并给出相应的代码。_matlab 空间谱 极化

mac 上的一些软件_uzerme替代品-程序员宅基地

文章浏览阅读1.1k次。给大家推荐一些我正在用的mac应用吧,上一篇详细说了一下 Alfred 3 的用法。。 这一篇大致介绍一下。。。具体的还是需要大家自己研究iTerm 2 是一个好用的命令行工具Dash 代码,语言,框架文档和一些快捷的代码块设计,,很方便Sequel Pro MySQL数据库链接很方便,感觉挺好用的Charles mac版的抓包工具。。还算不错mpv 我正在用的视频播放器,个人感觉_uzerme替代品

文献检索与应用_试述常用的二种医学专业搜索引擎的特色与检索方法?-程序员宅基地

文章浏览阅读3.8k次。信息检索的方法有多种,分别使用于不同的检索目的和检索要求。归纳起来,常用的信息检索方法有常规检索法、回溯检索法、循环检索法。1.常规检索法。又称常用检索法、工具检索法。它以主题、分类、作者等为检索点,利用检索工具获的信息资源的方法。根据检索方式,常规检索法又分为直接检索法和间接检索法;根据检索需求,常规检索法又分为顺查法、倒查法和抽查法。_试述常用的二种医学专业搜索引擎的特色与检索方法?

推荐文章

热门文章

相关标签