2014-02-25 78 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"); 
     } 
    } 
}