interface Selector {
  boolean end();
  Object current();
  void next();
}public class Sequence {
  private static Test monitor = new Test();
  private Object[] objects;
  private int next = 0;
  public Sequence(int size) { objects = new Object[size]; }
  public void add(Object x) {
    if(next < objects.length)
      objects[next++] = x;
  }
  private class SSelector implements Selector {
    private int i = 0;
    public boolean end() { return i == objects.length; }
    public Object current() { return objects[i]; }
    public void next() { if(i < objects.length) i++; }
  }
  public Selector getSelector() { return new SSelector(); }
  public static void main(String[] args) {
    Sequence sequence = new Sequence(10);
    for(int i = 0; i < 10; i++)
      sequence.add(Integer.toString(i));
    Selector selector = sequence.getSelector();
    while(!selector.end()) {
      System.out.println(selector.current());
      selector.next();
    }
      }
} ///:~
这里的while是判断数组的length属性是否为0吗? 他能判断到了数组末尾吗? 
谁来救救我啊.....

解决方案 »

  1.   

    while(!selector.end())
    在这里是看内部类里end()方法返回值是否为真,如果到了数组末,end()方法返回真,while(!...)就是假,就退出循环了.
      

  2.   

    代码完全正确,没有任何问题,思路也清楚!
    while 是判断当前指针i属否到达了数组的末尾。
      

  3.   

    当数组的length属性为0 就是到了末尾吗?
      

  4.   


    public boolean end(){return i == objects.length;} 
    你的程序设计有问题,你要先明白你的设计思路:
    index指针永远指向最后一个元素后面,也就是
    index==objects.length永远返回true~
    while(!selector.end()){ 

    永远不会执行~~~你设计的这个index并不是你设想的指向最后一个元素的活动指针,
    而是永远指向最后一个元素后面~
    好好想想看,改一下~
      

  5.   

    leng可不是为0就结束
    当i==leng时  才算是结束
      

  6.   

    我还有个问题 那个ADD方法有什么用
    我试过不添加的时候 输出10个NULL这个ADD 自动调用的吗?
      

  7.   

    add 用于初始化数组的内容!
      

  8.   

    数组初始化因为没有赋值  所以全部是null
    add 方法 就是给数组赋值
      

  9.   


    public void add(Object x){ 
      if(next < objects.length) 
        objects[next++] = x; 
    }
    你的设计next == objects.length永远成立,所以
    你的add()里面的if添加数据永远都不可能执行~
      

  10.   

      for(int   i   =   0;   i   <   10;   i++) 
                sequence.add(Integer.toString(i)); 
    如果我把数字改成100 会有隐患吗?
      

  11.   

    SSelector为什么不能实例化 ,请高人指点。
      

  12.   

    SSelector是内部类,实例化一个普通内部类的话,需要一个外部内的对象的,所以你不能直接实例
    楼主这个程序是THINKING IN JAVA里的吧,我以前好像见过啊,呵呵,好好学,加油哦,另祝新年快乐!
      

  13.   

    Mark一下,代码确实有学习的价值!有时间我也想去看看Thinking in java