2013-05-18 107 views
0

我已经使用矢量输入了三个元素,并试图从列表中删除特定元素,但无法这样做。无法使用迭代器删除元素

我收到以下错误而编译:

iterator.java:28:错误: '无效' 类型此处不允许 {的System.out.println(e.printStackTrace());} ^ 1错误

我在哪里做错了。

import java.io.*; 
    import java.util.*; 
    import java.lang.*; 

    class iterator 
    { 
    public static void main(String[] args) 
    { 
    Vector<Integer> v= new Vector<Integer>(); 
    //Vector<String> v= new Vector<String>(); 
    v.addElement(new Integer(10)); 
    v.addElement(new Integer(20)); 
    v.addElement(new Integer(30)); 

//v.addElement(new String("mayank")); 

    //v.addElement(new Boolean(true)); 
    //Enumeration e = v.elements(); 
    Iterator i = v.iterator(); 
    while(i.hasNext()) 
     { 
     System.out.println(i.next()); 
     } 
     try{ 
      v.remove(10); 
     } 
     catch(Exception e) 
     {System.out.println(e.printStackTrace());} 
     //System.out.println("Remove error exception");} 
    while(i.hasNext()) 
     { 
     System.out.println(i.next()); 
     } 


    } 
} 

回答

7

e.printStackTrace()可以满足您的所有需求。既然它返回一个void,你基本上有一个println试图打印一个不起作用的void(也没有意义)。解决方法:摆脱System.out.println。只需拨打e.printStackTrace()即可。 更好的是,使用日志记录。


编辑:此外,与10值取出整数,考虑做:

remove(new Integer(10)); 

,这样JVM不认为你删除参数代表的索引位置您希望删除的项目。


编辑2:注意,相反你的问题标题,您使用迭代器删除任何东西都


编辑3:去除而无需使用迭代

import java.util.Iterator; 
import java.util.Vector; 

class HisIterator { 
    public static void main(String[] args) { 
     Vector<Integer> v = new Vector<Integer>(); 

     v.addElement(new Integer(10)); 
     v.addElement(new Integer(20)); 
     v.addElement(new Integer(30)); 

     Iterator<Integer> i = v.iterator(); 
     while (i.hasNext()) { 
     System.out.println(i.next()); 
     } 
     try { 
     v.remove(new Integer(10)); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
     System.out.println(); 
     i = v.iterator(); 
     while (i.hasNext()) { 
     System.out.println(i.next()); 
     } 

    } 
} 

编辑4:与迭代

import java.util.Iterator; 
import java.util.Vector; 

class HisIterator { 
    public static void main(String[] args) { 
     Vector<Integer> v = new Vector<Integer>(); 

     v.addElement(new Integer(10)); 
     v.addElement(new Integer(20)); 
     v.addElement(new Integer(30)); 

     Iterator<Integer> i = v.iterator(); 
     while (i.hasNext()) { 
     Integer nextI = i.next(); 
     System.out.println(nextI); 
     if (nextI.equals(Integer.valueOf(10))) { 
      i.remove(); 
     } 
     } 
     // try { 
     // v.remove(new Integer(10)); 
     // } catch (Exception e) { 
     // e.printStackTrace(); 
     // } 
     System.out.println(); 
     i = v.iterator(); 
     while (i.hasNext()) { 
     System.out.println(i.next()); 
     } 

    } 
} 
+1

确实。它清楚地表明:** print **。 (http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace()) – Maroun

+0

我想从列表中删除10元素,但代码不这样做 – mayank

+1

@ mayank:请参阅编辑 –

0

您的代码具有固有的模糊性。 remove函数是通过元素索引而不是元素值。该程序将尝试删除第10个(基于零的)元素,而不是具有值10的元素。

矢量值类型为整数的事实会使事情更加混乱。