Java中LinkedList使用Iterator遍历的问题

类Controller:importjava.util.*;publicclassController{privateLinkedList<Event>eventList... 类Controller:
import java.util.*;
public class Controller {
private LinkedList<Event> eventList = new LinkedList<Event>();
public void addEvent(Event c) { eventList.add(c); }
public void run() {
LinkedList<Event> eventListCopy =
new LinkedList<Event>(eventList);
ListIterator<Event> it
= eventListCopy.listIterator();
while(it.hasNext()) {
it.next().action(); //action()函数会调用addEvent()函数添加元素
it.previous();
System.out.println(it.next().description()); //输出状态
}
}
}
主函数:
public static void main(String[] args) {
GreenhouseControls gc =
new GreenhouseControls();
long tm = System.currentTimeMillis();
gc.addEvent(gc.new Restart(tm));
gc.run();
}
=====================================================
action()函数利用addEvent()添加一系列元素
但是在while()中却只能输出第一个元素,为什么?
=====================================================
参考资料:《Thinking in Java 4th》(中文版) 第11章 练习13
程序很长,仅贴一部分:
private class Restart extends Event { //Event是一个抽象类
public Restart(long eventTime) {
super(eventTime);
}
public void action() {
long tm = System.currentTimeMillis();
rings = 5;
addEvent(new ThermostatNight(tm)); //这里所添加的ThermostatNight等结构都与Restart类相似,都有一个action方法(只有Restart类中有addEvent() )和description方法(作为状态输出)

addEvent(new LightOn(tm + 1000));
addEvent(new LightOff(tm + 2000));
addEvent(new WaterOn(tm + 3000));
addEvent(new WaterOff(tm + 8000));
addEvent(new Bell(tm + 9000));
addEvent(new ThermostatDay(tm + 10000));
// Can even add a Restart object!
addEvent(new Restart(tm + 20000));
}
public String description() {
return "Restarting system";
}
}
展开
 我来答
tianjigeng
2010-05-07 · TA获得超过593个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:0
展开全部
你还是直接把题目放上来吧。
你程序里好象只add了一次event啊,while循环就只会做一次,打出第一个元素啊。

如果gc.addEvent(gc.new Restart(tm));这一句里的gc就是你写的controller的话,那么在调用controller.addEvent方法时,eventList里只加入了一个Restart对象,所以在while遍历时只会循环一次,打印出Restart对象的description。
血色零染c
推荐于2016-04-27 · 超过30用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:87.7万
展开全部
next() 返回列表中的下一个元素
previous() 返回列表中的前一个元素。

next()后到第一个元素了,你再previous()又到起点了,总是第一个元素徘徊啊
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
还原过去
2010-05-07 · TA获得超过132个赞
知道答主
回答量:91
采纳率:0%
帮助的人:75.6万
展开全部
你通过action()函数利用addEvent()添加元素,是在异步的情况下进行的,异步问题必定要考虑先后问题,而且异步问题不保证其他线程的修改能够立即体现(否则也不会出现Object.wait()方法了)如果你需要在迭代的过程中添加元素,就必须保证迭代器能够在迭代的过程中修改容器,此时你必须使用迭代器的添加方法,此处应为it.add()进行容器添加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式