import java.util.*;
//程序将一个序列里为0的元素删除
public class Test
{
public static void main(String[]args)
{
LinkedList list=new LinkedList();
//添加10个随机整数
for(int i=0;i<10;++i)
{
list.add(new Integer((int)(10*Math.random())));
}
//为了确保序列里有0
list.add(new Integer(0));
list.add(new Integer(0));

System.out.println("删除0之前的元素序列:");
displayList(list);
System.out.println("删除0之后的元素序列:");
delete0(list);
displayList(list);

}
public static void displayList(List list)
{
ListIterator iterator=list.listIterator();
while(iterator.hasNext())
{
System.out.print(iterator.next()+" ");
}
System.out.println();
}
//删除值为0的元素
public static void delete0(List list)
{
ListIterator iterator=list.listIterator();
while(iterator.hasNext())
{
Integer intObj=(Integer)(iterator.next());
if(intObj.equals(new Integer(0)));
{
list.remove(intObj);
}
}
}
}

解决方案 »

  1.   

    你使用的删除方法有问题,还有用的迭代器也不对,下面是正确的代码import java.util.LinkedList;
    import java.util.List;
    import java.util.ListIterator;
    import java.util.Iterator;public class A2 {
        public static void main(String[]args){
            LinkedList list=new LinkedList();
            //添加10个随机整数
            for(int i=0;i<10;++i){
                list.add(new Integer((int)(10*Math.random())));
            }
            //为了确保序列里有0
            list.add(new Integer(0));
            list.add(new Integer(0));        System.out.println("删除0之前的元素序列:");
            displayList(list);        delete0(list);
            System.out.println("删除0之后的元素序列:");
            displayList(list);    }    public static void displayList(List list){
            ListIterator iterator=list.listIterator();
            while(iterator.hasNext())
            {
                System.out.print(iterator.next()+" ");
            }
            System.out.println();
        }
        //删除值为0的元素
        public static void delete0(List list)
        {
            Iterator iterator=list.iterator();
    //        ListIterator iterator=list.listIterator();
            while(iterator.hasNext())
            {
                Integer intObj=(Integer)(iterator.next());
                if(intObj.equals(0)) //这里删除原来代码的一个分号
                {
    //                list.remove(intObj); //这里使用iterator的remove进行删除
                    iterator.remove();
                }
            }
        }}
      

  2.   

    list.remove(intObj);移除错了,list只是参数的形参实际的值是赋给iterator的
      

  3.   

    分号确实是我大意了,用ListIterator没有问题的。我不解的是为何不能在delete0函数体执行list的删除操作,望高手赐教,谢谢。
      

  4.   

    2楼我已经说明了 为什么不能用list了
      

  5.   

    虽说java中,函数传递参数都是传值,但是像delete0的情况,但经过传值后,参数list也应该是之前定义的new LinkedList()的一个引用吧……高手能否详细说明下?
      

  6.   


    这个涉及到具体List的remove()方法的具体实现,其实也不是因为list是形式参数,一般的编程操作List的时候,如果你使用了迭代器Iterator的话,删除操作都从Iterator来做,不用List直接操作
      

  7.   

    这个和iterator的具体实现有关系的:
    坛子里的帖子:
    http://topic.csdn.net/u/20110824/09/17ce3e32-c6c0-4413-afe5-2d98df864aee.html