问题描述
- Java中list集合的问题
- for(int i=0;i<all.size();i++)
{if(all.get(i).getSno().equals(sno)) { System.out.println(""正在删除的是:""+all.get(i).getSno()); all.remove(i); flag=true; } } for (int i = 0; i < all.size(); i++) { System.out.println(""正在保存的是:""+all.get(i).getSno()); String sno2= all.get(i).getSno(); String sname=all.get(i).getSname(); String sex=all.get(i).getSex(); int age=all.get(i).getAge(); String info=sno2+""#""+sname+""$""+sex+""^""+age+"";""; //调用写入数据的方法 try { studentDao.saveFile(""db\student.txt""infotrue); } catch (Exception e) { logger.error(e.getMessage()); } }
//////////////////////////////////////////////////////////////////// for(int i=0;i<all.size();i++) { if(all.get(i).getSno().equals(sno)) { System.out.println(""正在删除的是:""+all.get(i).getSno()); all.remove(i); flag=true; } else { System.out.println(""正在保存的是:""+all.get(i).getSno()); String sno2= all.get(i).getSno(); String sname=all.get(i).getSname(); String sex=all.get(i).getSex(); int age=all.get(i).getAge(); String info=sno2+""#""+sname+""$""+sex+""^""+age+"";""; //调用写入数据的方法 try { studentDao.saveFile(""db\student.txt""infotrue); } catch (Exception e) { logger.error(e.getMessage()); } } }
dbstudent.txt中原本有
1001#Lucy1$男^33;
1002#Lucy2$男^33;
1003#Lucy3$男^33;
1004#Lucy4$男^33;
数据,然后通过编号1001来删除这条数据,然后把剩下的数据重新写到student.txt中,可是第一种方法中用if——else中如果删除1001这条记录,最后剩下的数据中有1003和1004这两条数据,用两个for循环正常这是为什么?
解决方案
for循环里面你对List进行了remove,这种有remove的需要从大往小,如果从小到大,remove后会报错。
for(int i=all.size()-1;i>=0;i--){ all.remove(i); }
解决方案二:
什么问题???????
解决方案三:
一个循环时,remove第一条数据后i为1,而此时all中index为1的数据是1003的那条,所以最后数据只有两条数据啦。而用两个循环因为后循环从0开始,所以能取得三条数据。
时间: 2024-08-30 17:10:41