A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 高梦晓 于 2013-4-13 11:18 编辑
  1. try {
  2.                 fis = new FileInputStream("d:/tongxun/info.txt");
  3.                 ois = new ObjectInputStream(fis);
  4.                 list = (ArrayList)ois.readObject();
  5.         
  6.                         System.out.println("请输入要删除的ID号:");
  7.                         k=sb.nextInt();
  8.                         for(Information ia:list)
  9.                                 if(ia.getId()==k){
  10.                                         n++;
  11.                                         list.remove(ia);}
  12.                         l-=n;
  13.                         ois.close();
  14.                         fis.close();
  15.         } catch (FileNotFoundException e) {
  16.                 // TODO Auto-generated catch block
  17.                 e.printStackTrace();
  18.         } catch (IOException e) {
  19.                 // TODO Auto-generated catch block
  20.                 e.printStackTrace();
  21.         } catch (ClassNotFoundException e) {
  22.                 // TODO Auto-generated catch block
  23.                 e.printStackTrace();
  24.         }
复制代码
帮忙看看这段代码 就是不让我直接remove  应该怎么弄啊!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

倒序浏览
不要用foreach循环,用listIterator遍历。
回复 使用道具 举报
本帖最后由 杨冉 于 2013-4-12 18:37 编辑

你的那个ia只是指向你遍历的ArrayList的,而不是真正的ArrayList对象,所以无法直接对其中数据进行操作,所以高级for循环是无法操作遍历对象的数据的。
最好使用迭代器,也就是楼上所说的ListIterator。
  1. try {
  2. fis = new FileInputStream("d:/tongxun/info.txt");
  3. ois = new ObjectInputStream(fis);
  4. list = (ArrayList)ois.readObject();
  5. ListIterator itr = list.listIterator();
  6. while (itr.hasNext())
  7. {
  8. if (ia.getId()==k)
  9. {
  10. n++;
  11. itr.remove();
  12. }
  13. }
  14. l-=n;
  15. ois.close();
  16. fis.close();
  17. } catch (FileNotFoundException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. } catch (IOException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. } catch (ClassNotFoundException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
复制代码
试试这样行不行,没有你的全部代码我也没法实验。。。不过我也是不是很熟,只是提出我的想法。。。有错误不要见笑。。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 love_java 于 2013-4-12 18:27 编辑

不知道你那个Information数据类型是什么样的
这是api里remove的定义
boolean remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。
或者我看见
那个遍历可能是不能用foreach
应该用listiterator接口吧

回复 使用道具 举报
让大家帮忙看看吧,我也不清楚。。
回复 使用道具 举报
高级for循环仅仅用来遍历并显示集合,使用lListIterator 和Iterator可以完成你对应的功能。
回复 使用道具 举报

如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马