2013-05-18 2 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() все, что вам нужно. Поскольку он возвращает пустоту, вы, по сути, имеете println, пытающийся напечатать пустоту, которая не работает (и также не имеет смысла).

Решение: Избавьтесь от System.out.println. Просто позвоните e.printStackTrace(). Еще лучше, используйте протоколирование.


редактировать: Кроме того, для удаления Integer со значением 10, рассмотреть возможность:

remove(new Integer(10)); 

так, что JVM не думает, что ваш параметр удалить представляет позицию индекса который вы хотите удалить.


Edit 2: Обратите внимание, что в отличие от Вашего названия вопроса, вы не с помощью итератора, чтобы удалить что-нибудь.


Edit 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.

Тот факт, что типы векторных значений являются целыми числами, делает вещи более запутанными.

Смежные вопросы