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;

            循环体
         }

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值