for循环正确遍历数组

简介:        也许有人觉得for循环遍历数组很简单啊,但是不明白for循环的原理,很容易造成严重的后果。

       也许有人觉得for循环遍历数组很简单啊,但是不明白for循环的原理,很容易造成严重的后果。最近有个项目,技术人员离职了,客户有个需求要修改,我就去现场帮忙改了一下,更新后第四天,客户打来电话说,系统出现漏费情况了,我开始觉得是不是客户搞错了,因为我只是修改了一个很简单的功能啊,不至于影响到费用啊,但是远程连到客户那边发现确实是漏费了,我赶紧跑到了现场。

        由于前期技术人员没按照规范来编程,出错的那个类有11261行,出错的那个方法有1102行,由于服务运行在jetty上面,客户端访问tomcat通过zookeeper + rpc再去访问jetty。我电脑上不具备debug的条件,代码排查起来非常的困难。据客户反映这种情况是我这次更新造成的,我把我写的代码排查了一遍又一遍,一直没发现问题,我甚至开始怀疑是不是我的电脑环境有问题,编译的时候造成了某些插件不匹配。由于方法体太长了,逻辑判断也非常的复杂,排查了一整个下午,毫无进展,当我几乎绝望的时候,突然发现一个for循环的循环体好像没有执行到。for循环是遍历一个数组,写法如下:

     for(int i=0;examPart[i]!=0;i++) {

         循环体

     }

     我赶紧去找examPart[]赋值的地方,定义的地方如下:
     int[] examPart = {0,0,0,0};

     后面根据不同的条件分别给examPart的四个成员进行了赋值。

     根据业务逻辑,终于明白了技术人员的意图,他是想遍历examPart的四个成员,对值不为0的成员进行处理。

     说到这,明白for循环原理的人,可能就发现问题的原因了,当examPart某个成员为0的时候,直接就跳出循环了,此时刚好examPart[0]为0,所以循环体一次也没执行到。大家有没有发现这种写法还存在一个问题,如果examPart的四个成员都不为0,会出现什么情况?当遍历完最后一个数组成员后,继续执行i++,继续判断执行条件,就会出现数组越界的情况了,编程完全不考虑异常情况啊,这也是为什么第三方用户一直抱怨说,你们现场技术人员写的代码经常出现越界的情况。原因找到了,技术人员也离职了,总得给客户一个交代吧,挺大的一个锅我背下来了。

     下面我们来分析一下如何正确的用for循环来遍历数组。

      我们先看一下for循环的定义。

      for( 初始语句  ; 执行条件  ; 增量 )
      {
        循环体
       }
       执行顺序:1、初始语句  2、执行条件是否符合?  3、循环体  4、增加增量
       初始化语句只在循环开始前执行一次,每次执行循环体时要先判断是否符合条件,如果循环条件还为true,则执行循环体,再执行迭代语句。对于for循环,循环条件总比循环体多执行一次。

       明白了for循环的定义后,我们可以很好的来写for循环如何遍历数组了。

       针对上面的代码我们应该修改如下:

       for(int i=0;i<examPart.length;i++) {

           if (examPart[i]==0) then continue;

           循环体

       }

      更简洁一下可以修改如下:

      for (int i : examPart) {  
            if (i==0) then continue;

            循环体
         }

目录
相关文章
|
1月前
for循环是什么
for循环是什么
57 0
|
1月前
数组去重for循环和for循环嵌套
数组去重for循环和for循环嵌套
25 0
|
3月前
|
Java 索引
增强for循环和一般for循环的对比使用
这篇文章对比了Java中的增强for循环(for-each循环)和传统的for循环,介绍了增强for循环的优点,如简化数组或集合的遍历、提高代码的可读性和可维护性,并指出增强for循环不适用于需要修改数组或集合元素的场景。文章还提供了增强for循环的语法格式,并展示了在实际应用中如何使用增强for循环来遍历数组和数组对象。
增强for循环和一般for循环的对比使用
|
3月前
|
存储 程序员 C++
【C++小知识】基于范围的for循环(C++11)
【C++小知识】基于范围的for循环(C++11)
|
6月前
|
C语言
for循环
for循环
46 1
|
6月前
|
存储 C++ 容器
【C++11】 基于范围的for循环
【C++11】 基于范围的for循环
57 0
|
Python
for循环与if判断语句的运用
for循环与if判断语句的运用
112 0
|
编译器 C++ 容器
C++11之基于范围的for循环
C++11之基于范围的for循环
113 0
|
文件存储
ModelBuilder中的For循环和While循环
鸽了这么久了的ModelBuilder教程,开始恢复更新了,嘤嘤嘤 现在开始讲迭代器,迭代是指以一定的自动化程度多次重复某个过程,通常又称为循环。说的通俗点就是批量循环处理,简称批处理。
131 0