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;

            循环体
         }

目录
相关文章
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1090 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1754 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
697 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
661 14
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
447 5