0

我使用向量输入了三个元素,并试图从列表中删除特定的元素,但无法这样做。

我在编译时收到以下错误:

iterator.java:28:错误:此处不允许“void”类型 {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());
       }


     }
} 
4

2 回答 2

7

e.printStackTrace()做你需要的一切。由于它返回一个 void,因此您基本上有一个 println 试图打印一个不起作用的 void(也没有意义)。

解决方案:摆脱System.out.println. 只需调用e.printStackTrace(). 更好的是,使用日志记录。


编辑:此外,要删除具有 10 值的整数,请考虑执行以下操作:

remove(new Integer(10));

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


编辑 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());
      }

   }
}
于 2013-05-18T19:42:07.973 回答
0

您的代码具有固有的歧义。删除功能是按元素索引而不是元素值。程序将尝试删除第 10 个(从零开始)元素,而不是值为 10 的元素。

向量值类型是整数的事实使事情变得更加混乱。

于 2013-05-18T19:44:52.197 回答