黑马程序员技术交流社区

标题: 帮忙看看这段代码 就是不让我直接remove 应该怎么弄啊! [打印本页]

作者: 高梦晓    时间: 2013-4-12 17:57
标题: 帮忙看看这段代码 就是不让我直接remove 应该怎么弄啊!
本帖最后由 高梦晓 于 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  应该怎么弄啊!

作者: 刘子义    时间: 2013-4-12 18:08
不要用foreach循环,用listIterator遍历。
作者: 杨冉    时间: 2013-4-12 18:15
本帖最后由 杨冉 于 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();
复制代码
试试这样行不行,没有你的全部代码我也没法实验。。。不过我也是不是很熟,只是提出我的想法。。。有错误不要见笑。。

作者: love_java    时间: 2013-4-12 18:22
本帖最后由 love_java 于 2013-4-12 18:27 编辑

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


作者: love_java    时间: 2013-4-12 18:24
让大家帮忙看看吧,我也不清楚。。
作者: 王大斌    时间: 2013-4-12 19:06
高级for循环仅仅用来遍历并显示集合,使用lListIterator 和Iterator可以完成你对应的功能。
作者: 打工人    时间: 2013-4-12 23:13

如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2