请参阅下面的代码,我正在使用枚举从向量和打印中重新元素。
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循环是打印vector的元素但第二个while循环不是打印元素,为什么?以及第一个while循环如何能够显示123而不是12?我正在学习java帮助我..
答案 0 :(得分:4)
您在Eumeration
循环中仅使用一个while
对象。
System.out.prinln(vector);
行打印出[1, 2]
。
第一个while
循环打印出12
,因为那是当时唯一的2个元素。
您添加了第三个元素,但不会重新开始使用新的Enumeration
。旧Enumeration
现在看到另一个元素,因此它在同一行上打印3
。 两个循环都会影响单行输出123
。
它还解释了为什么你看到
why not printing
仅打印一次。
答案 1 :(得分: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
答案 2 :(得分:1)
实际上第一个while循环正在打印12而第二个while循环正在打印(3为什么不打印)。你只需修改你的代码,如下所示。这样你就可以轻松区分。
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");
}
}
}
答案 3 :(得分:0)
第一个while循环终止,因为enumeration
已用尽元素。所以没有更多的元素可以用于迭代的下一个while循环。
您需要创建一个包含新值的新Enumeration
。再次调用
enumeration = vector.elements();
Enumeration
只能使用一次。一旦它们耗尽,就必须重新创建它们。
还应注意,不建议使用Vector
和Enumeration
,而应将其替换为ArrayList
和Iterator
。
来自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。
答案 4 :(得分:-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()) {