2013-05-18 78 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的元素。

矢量值類型爲整數的事實會使事情更加混亂。