现在的位置: 首页 > 综合 > 正文

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

2013年01月26日 ⁄ 综合 ⁄ 共 4438字 ⁄ 字号 评论关闭

 

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

 

改过的代码:

 

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 即为每一次都是插入数据,导致我每一次修改 都是 插入数据,数据急剧增加!!!

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

 

抱歉!评论已关闭.