您的位置:首页 > 其它

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

2009-11-04 06:53 405 查看
总结,一定要让整个内存循环执行完!!!

改过的代码:

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 即为每一次都是插入数据,导致我每一次修改 都是 插入数据,数据急剧增加!!!
呵呵后来 ,改成了上面做标记的代码了。最关键的是要控制内陈循环执行完!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐