一个价值几个小时的BUG -- 处理循环

本文介绍了一个关于内存循环处理的问题及解决方法。通过调整内层循环的逻辑,确保循环完全执行,避免了数据处理中出现重复插入的问题。

 

总结 ,一定要让整个内存循环执行完!!!

 

改过的代码:

 

ArrayList<UserInfo> userList  = new ArrayList<UserInfo>();

        ArrayList<UserInfo> userListCompare= this.Equipment.getUserList();//暂存更改以前的userlist里面的用户信息 ,比较用

        for(int i=0;i<this.JtEquipmentUser.getRowCount();i++)

        {

            UserInfo u=new UserInfo();

            for(int k=0;k<userListCompare.size();k++)

            {

                System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));

                if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))

                {

                    u.setuserOpFlag("modify");

                    break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句

                }

                else if(k==userListCompare.size()-1)

                {

                    u.setuserOpFlag("add");

                    break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句

                }

                else

                {

                    continue;

                }

            }

            Object obj=this.JtEquipmentUser.getValueAt(i, 0);

            if(!obj.equals(null))

            {

                u.setEquipmentid(jtxtEquipId.getText().trim());

                u.setUid(this.JtEquipmentUser.getValueAt(i, 0).toString());

                u.setUserType(this.JtEquipmentUser.getValueAt(i,2).toString());

                u.setPwd(this.JtEquipmentUser.getValueAt(i, 1).toString());

            }

            userList.add(u);

          //  u.setuserOpFlag("add");

         

        }

        Equipment.setUserList(userList);

   

         ArrayList<ItemInfo> itemList=new ArrayList<ItemInfo>();

         for(int l=0;l<this.JTEquipmentItem.getRowCount();l++)

         {

             ItemInfo itif=new ItemInfo();

             Object obj1=this.JTEquipmentItem.getValueAt(l, 0);

             if(!obj1.equals(null))

            {

                itif.setEquipmentID(Equipment.getEquipmentId());                 //设备id

                itif.setitemName(this.JTEquipmentItem.getValueAt(l, 0).toString());

                itif.setUid(this.JTEquipmentItem.getValueAt(l, 1).toString());

                itif.setMaxValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 2).toString()));

                itif.setMinValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 3).toString()));

                itif.setAvgValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 4).toString()));

            }

             itemList.add(itif);

         }

        Equipment.setitemList(itemList);

 

 

 

开始的时候, 代码 《循环部分的》

后来的内陈循环:

for(int k=0;k<userListCompare.size();k++)

            {

                System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));

                if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))

                {

                    u.setuserOpFlag("modify");

                    break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句

                }

********************加颜色的是控制内层代码执行完的************************

                else if(k==userListCompare.size()-1)

                {

                    u.setuserOpFlag("add");

                    break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句

                }

                else

                {

                    continue;

                }

            }

********************加颜色的是控制内层代码执行完的************************

 

 

开始的内存循环:

for(int k=0;k<userListCompare.size();k++)

            {

                System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));

                if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))

                {

                    u.setuserOpFlag("modify");

                    break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句

                }

                else             

{

                    u.setuserOpFlag("add");

                    break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句

                }

            }

 

对比发现 :我的开始的内陈循环没有执行完,就跳出循环,把操作符改成了 insert 即为每一次都是插入数据,导致我每一次修改 都是 插入数据,数据急剧增加!!!

呵呵后来 ,改成了上面做标记的代码了最关键的是要控制内陈循环执行完!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值