我把下面这个程序修改后
abstract public class Event {
private long evtTime;
public Event(long eventTime) {
evtTime = eventTime;
}
public boolean ready() {
return System.currentTimeMillis() >= evtTime;
}
abstract public void action();
abstract public String description();
}
class EventSet {
private Event[] events = new Event[100];
private int index = 0;
private int next = 0;
public void add(Event e) {
if(index >= events.length)
return; // (In real life, throw exception)
events[index++] = e;
}
public Event getNext() {
boolean looped = false;
int start = next;
do {
next = (next + 1) % events.length;
// See if it has looped to the beginning:
if(start == next) looped = true;
// If it loops past start, the list
// is empty:
if((next == (start + 1) % events.length)
&& looped)
return null;
} while(events[next] == null);
return events[next];
}
public void removeCurrent() {
events[next] = null;
}
}public class Controller {
private EventSet es = new EventSet();
public void addEvent(Event c) { es.add(c); }
public void run() {
Event e;
while((e = es.getNext()) != null) {
if(e.ready()) {
e.action();
System.out.println(e.description());
es.removeCurrent();
}
}
}
}
改为下面这样,因为我想用Stack来代替EventSet,
import java.util.*;abstract class Event { private long evtTime; public Event(long eventTime) { evtTime = eventTime; } public boolean ready() { return System.currentTimeMillis() >= evtTime; } abstract public void action(); abstract public String description(); private class Fan {
void open(){
System.out.println("fan is open");
}
void close(){
System.out.println("fan is close");
}
}
Fan f = new Fan();
} class EventSet {
private Event[] events = new Event[100];
private Stack st;
Stack getStack(){
for(int i = 0; i < 100; i++)
st.push(events[i]);
return st;
}
private int index = 0;
private int next = 0;
public void add(Event e) {
if(index >= st.size())
return; // (In real life, throw exception)
st.elementAt(index++) = e;
}
public Event getNext() {
boolean looped = false;
int start = next;
do {
next = (next + 1) % st.size();
// See if it has looped to the beginning:
if(start == next) looped = true;
// If it loops past start, the list
// is empty:
if((next == (start + 1) % st.size())
&& looped)
return null;
} while(st.elementAt(next) == null);
return st.elementAt(next);
}
public void removeCurrent() {
st.elementAt(next) = null;
}
}class Controller {
private EventSet es = new EventSet();
public void addEvent(Event c) { es.add(c); }
public void run() {
Event e;
while((e = es.getNext()) != null) {
if(e.ready()) {
e.action();
System.out.println(e.description());
es.removeCurrent();
}
}
}
}
但编译不了,我不知道错在哪里,能不能帮我看看
abstract public class Event {
private long evtTime;
public Event(long eventTime) {
evtTime = eventTime;
}
public boolean ready() {
return System.currentTimeMillis() >= evtTime;
}
abstract public void action();
abstract public String description();
}
class EventSet {
private Event[] events = new Event[100];
private int index = 0;
private int next = 0;
public void add(Event e) {
if(index >= events.length)
return; // (In real life, throw exception)
events[index++] = e;
}
public Event getNext() {
boolean looped = false;
int start = next;
do {
next = (next + 1) % events.length;
// See if it has looped to the beginning:
if(start == next) looped = true;
// If it loops past start, the list
// is empty:
if((next == (start + 1) % events.length)
&& looped)
return null;
} while(events[next] == null);
return events[next];
}
public void removeCurrent() {
events[next] = null;
}
}public class Controller {
private EventSet es = new EventSet();
public void addEvent(Event c) { es.add(c); }
public void run() {
Event e;
while((e = es.getNext()) != null) {
if(e.ready()) {
e.action();
System.out.println(e.description());
es.removeCurrent();
}
}
}
}
改为下面这样,因为我想用Stack来代替EventSet,
import java.util.*;abstract class Event { private long evtTime; public Event(long eventTime) { evtTime = eventTime; } public boolean ready() { return System.currentTimeMillis() >= evtTime; } abstract public void action(); abstract public String description(); private class Fan {
void open(){
System.out.println("fan is open");
}
void close(){
System.out.println("fan is close");
}
}
Fan f = new Fan();
} class EventSet {
private Event[] events = new Event[100];
private Stack st;
Stack getStack(){
for(int i = 0; i < 100; i++)
st.push(events[i]);
return st;
}
private int index = 0;
private int next = 0;
public void add(Event e) {
if(index >= st.size())
return; // (In real life, throw exception)
st.elementAt(index++) = e;
}
public Event getNext() {
boolean looped = false;
int start = next;
do {
next = (next + 1) % st.size();
// See if it has looped to the beginning:
if(start == next) looped = true;
// If it loops past start, the list
// is empty:
if((next == (start + 1) % st.size())
&& looped)
return null;
} while(st.elementAt(next) == null);
return st.elementAt(next);
}
public void removeCurrent() {
st.elementAt(next) = null;
}
}class Controller {
private EventSet es = new EventSet();
public void addEvent(Event c) { es.add(c); }
public void run() {
Event e;
while((e = es.getNext()) != null) {
if(e.ready()) {
e.action();
System.out.println(e.description());
es.removeCurrent();
}
}
}
}
但编译不了,我不知道错在哪里,能不能帮我看看
解决方案 »
- sax解释问题,sax解释的characters如果为空元素就不走这个方法了是怎么回事?
- 请高手解释下这段代码的算法!!
- 初学JAVA,请问大哥们,JAVA用什么IDE比较好?谢谢!!!
- 学习《Java正则表达式详解》中举的第一个例子后,一个问题:
- 在j2sdk1。3中如何将一个文件打开后锁定,不让别的程序删改?
- 写一个通讯程序出现出现错误 java.io.EOFException错误
- java中是通过什么类或者方法去修改注册表的,急!
- Java 访问控制的问题(public,private,protected,(default))!讨论讨论!
- 那里有forte for java的编程书籍下载???
- 求助jsp的刷新问题
- 有没有做日期选择的JavaApplet?
- 主要散分,祝福大家五一节玩得开心哈。顺便问下怎么获取信誉分()?
class EventSet {
private Event[] events = new Event[100];
private Stack st;
Stack getStack(){
for(int i = 0; i < 100; i++)
st.push(events[i]);
return st;
}
private int index = 0;
private int next = 0;
public void add(Event e) {
if(index >= st.size())
return; // (In real life, throw exception)
st.elementAt(index++) = e;
}
public Event getNext() {
boolean looped = false;
int start = next;
do {
next = (next + 1) % st.size();
// See if it has looped to the beginning:
if(start == next) looped = true;
// If it loops past start, the list
// is empty:
if((next == (start + 1) % st.size())
&& looped)
return null;
} while(st.elementAt(next) == null);
return st.elementAt(next);
}
public void removeCurrent() {
st.elementAt(next) = null;
}
}
显示出下面的错误:
unexpected type
required:variable
found :value
st.elementAt(index++) = e;incompatible types
found :java.lang.object
required: Event
return st.elementAt(next);unexpected type
required:variable
found :value
st.elementAt(next)= null;
改:
st.setElementAt(index++,e);
改:
return (Event)st.elementAt(next);
改:
st.setElementAt(e,index++);