黑马程序员技术交流社区
标题:
帮忙看看这段代码 就是不让我直接remove 应该怎么弄啊!
[打印本页]
作者:
高梦晓
时间:
2013-4-12 17:57
标题:
帮忙看看这段代码 就是不让我直接remove 应该怎么弄啊!
本帖最后由 高梦晓 于 2013-4-13 11:18 编辑
try {
fis = new FileInputStream("d:/tongxun/info.txt");
ois = new ObjectInputStream(fis);
list = (ArrayList)ois.readObject();
System.out.println("请输入要删除的ID号:");
k=sb.nextInt();
for(Information ia:list)
if(ia.getId()==k){
n++;
list.remove(ia);}
l-=n;
ois.close();
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
复制代码
帮忙看看这段代码 就是不让我直接remove 应该怎么弄啊!
作者:
刘子义
时间:
2013-4-12 18:08
不要用foreach循环,用listIterator遍历。
作者:
杨冉
时间:
2013-4-12 18:15
本帖最后由 杨冉 于 2013-4-12 18:37 编辑
你的那个ia只是指向你遍历的ArrayList的,而不是真正的ArrayList对象,所以无法直接对其中数据进行操作,所以高级for循环是无法操作遍历对象的数据的。
最好使用迭代器,也就是楼上所说的ListIterator。
try {
fis = new FileInputStream("d:/tongxun/info.txt");
ois = new ObjectInputStream(fis);
list = (ArrayList)ois.readObject();
ListIterator itr = list.listIterator();
while (itr.hasNext())
{
if (ia.getId()==k)
{
n++;
itr.remove();
}
}
l-=n;
ois.close();
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
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