2014-02-25 79 views
-1

请参阅下面的代码,我使用枚举检索矢量元素和打印。使用枚举检索元素

package com.rajeev.enumeration; 

import java.util.Enumeration; 
import java.util.Vector; 

public class Modification_On_Eumeration { 
    public static void main(String[] args) { 
     Vector<Integer> vector = new Vector<Integer>(); 
     vector.add(1); 
     vector.add(2); 
     System.out.println(vector);//here it is printing 12(ok) 
     Enumeration<Integer> enumeration = vector.elements(); 
     while (enumeration.hasMoreElements()) { 
      Integer integer = (Integer) enumeration.nextElement(); 
      System.out.print(integer);//why it is printing 123 instead of 12(reason ????) 
     } 
     vector.add(3); 
     while (enumeration.hasMoreElements()) { 
      Integer integer1 = (Integer) enumeration.nextElement(); 
      System.out.println(integer1);//why it is not printing ??? 
      System.out.println("why not printing"); 
     } 
    } 
} 

output 
------ 
[1, 2] 
123 
why not printing 

第一while循环是矢量的打印元件但第二while循环不打印元件,为什么呢?以及第一个while循环如何显示123而不是12?我正在学习java帮我..

+0

在第二个while循环中,枚举打印'3'和'“为什么不打印''。 –

回答

4

您在while循环中只使用一个Eumeration对象。

System.out.prinln(vector);行打印出[1, 2]

第一个while循环打印出12,因为那些是当时唯一的2个元素。

您添加了第三个元素,但是您不会从新的Enumeration开始。旧的Enumeration现在看到另一个元素,因此它在同一行上打印3两个循环都有助于单行输出,123

这也解释了为什么你看到

why not printing 

打印一次。

+0

+1是的,如果他改为“println”,他会看到这正是发生的事情。 – Brian

0

第一个while循环终止,因为enumeration已用完元素。所以下一个while循环就没有更多的元素可以迭代了。

您需要创建一个包含新值的新的Enumeration。用另一个电话刷新它以

enumeration = vector.elements(); 

Enumeration s只能使用一次。一旦他们用完,他们必须重新创建。

还应该注意的是,使用VectorEnumeration不鼓励,应该用ArrayListIterator替换。

http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html

这个界面的功能由Iterator接口复制。另外,Iterator增加了一个可选的删除操作,并且具有较短的方法名称。新的实现应该考虑使用Iterator而不是Enumeration。

http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html

从Java 2平台v1.2,这个类进行改进来实现List接口,使它成为Java Collections Framework的成员。与新的集合实现不同,Vector是同步的。如果不需要线程安全的实现,建议使用ArrayList来代替Vector。

+0

为什么投票反对?我正在解决这个问题。 – aliteralmind

-1

您将需要从矢量中创建一个新的枚举,因为您已经使用了用于迭代的枚举。仅仅因为它尚未添加,您无法在第一个循环中看到元素3

Enumeration<Integer> enumeration = vector.elements(); 
    while (enumeration.hasMoreElements()) { 
     Integer integer = (Integer) enumeration.nextElement(); 
     System.out.print(integer);//why it is printing 123 instead of 12(reason ????) 
    } 
    vector.add(3); 
    enumeration = vector.elements(); 
    while (enumeration.hasMoreElements()) { 
1

如果您修改代码以增加一些调试信息(你应该在第一时间做了),你会看到正在发生的事情 - 如预期,一切都很好,工作:

import java.util.Enumeration; 
    import java.util.Vector; 

    public class Modification_On_Eumeration { 
     public static void main(String[] args) { 
      Vector<Integer> vector = new Vector<Integer>(); 
      vector.add(1); 
      vector.add(2); 
      System.out.println("After adding 1 and 2 to the Vector<Integer>"); 
      System.out.println(vector);//here it is printing 12(ok) 
      Enumeration<Integer> enumeration = vector.elements(); 
      while (enumeration.hasMoreElements()) { 
       Integer integer = (Integer) enumeration.nextElement(); 
       System.out.println("in first loop before print"); 
       System.out.println(integer);//why it is printing 123 instead of 12(reason ????) 
       System.out.println("in first loop after print"); 
      } 
      vector.add(3); 
      while (enumeration.hasMoreElements()) { 
       Integer integer1 = (Integer) enumeration.nextElement(); 
       System.out.println(integer1);//why it is not printing ??? 
       System.out.println("why not printing"); 
      } 
     } 
    } 

输出:

Executing the program.... 
$java -Xmx128M -Xms16M Modification_On_Eumeration 

After adding 1 and 2 to the Vector<Integer> 
[1, 2] 
in first loop before print 
1 
in first loop after print 
in first loop before print 
2 
in first loop after print 
3 
why not printing 
1

实际上是第一个while循环打印12和第二while循环打印(3为什么不打印)。你只需要修改你的代码像下面是.so,你可以轻松的存款保险计划tinguish。

public class Modification_On_Eumeration { 
    public static void main(String[] args) { 
     Vector<Integer> vector = new Vector<Integer>(); 
     vector.add(1); 
     vector.add(2); 
     System.out.println(vector);//here it is printing 12(ok) 
     Enumeration<Integer> enumeration = vector.elements(); 
     while (enumeration.hasMoreElements()) { 
      Integer integer = (Integer) enumeration.nextElement(); 
      System.out.print(integer);//why it is printing 123 instead of 12(reason ????) 
     } 
     System.out.println(); 
     System.out.println("first loop finished"); 
     vector.add(3); 
     while (enumeration.hasMoreElements()) { 
      Integer integer1 = (Integer) enumeration.nextElement(); 
      System.out.println(integer1);//why it is not printing ??? 
      System.out.println("why not printing"); 
     } 
    } 
}