我把下面这个程序修改后
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();
      }
    }
  }
}
但编译不了,我不知道错在哪里,能不能帮我看看

解决方案 »

  1.   

    下面是出现错误的那段代码,烦扰大师看看,小弟不甚感激:
    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;
      

  2.   

    st.elementAt(index++) = e;   //这种用法是错误的
    改:
    st.setElementAt(index++,e);
      

  3.   

    return st.elementAt(next);
    改:
    return (Event)st.elementAt(next);
      

  4.   

    nimifeng大哥,那样还是出现同样的错误呀
      

  5.   

    st.elementAt(index++) = e;   //这种用法是错误的
    改:
    st.setElementAt(e,index++);