迭代器不能为我的队列工作?

时间:2015-10-31 21:58:28

标签: java timer iterator queue nodes

所以现在我正在制作一个商店模拟器,它可以计算物品,平均等待时间等在线的用户等等。到目前为止,我已经能够获得所有必需的数据没有问题,但现在我我无法为当前未检出的每个客户设置计时器。因此,如果队列中的客户不是第一个(检出的那个),我会启动一个计时器,每秒将等待时间增加一个。一旦它们成为第一个(它们被检出)它就会停止计时器,然后将该时间加到该行或队列的整个等待时间。我这样做的方法是程序每秒都会使用每个队列运行此方法(在这种情况下,我有六个“行”或队列)。这是我到目前为止的一个例子:

    private void waitTime(LineQueue<Customer> l){
    Iterator<Customer> iter = l.iterator();
    Customer[] c = new Customer[l.size()]; 
    int count = 0;

    if(iter.hasNext()){
        try{
            c[count] = iter.next(); 
        }catch(NullPointerException e){
            //does nothing with it
        }
    }

    for(int i = 1; 1 < c.length; i++){
        try{
            c[i].incrimentWaitTime();
        }catch(NullPointerException | ArrayIndexOutOfBoundsException e){
            //does nothing with it
        }
    }
}

然后如何实施:

            timer.scheduleAtFixedRate(new TimerTask(){
            @Override
            public void run(){
                for(LineQueue<Customer> e : queues){
                    waitTime(e);
                }
            }
        }, 0, 1000);

此时我不知道该怎么做,虽然从我的看法来看,我必须使用Iterator才能使其正常工作。这里还有关于每个东西如何放入队列的代码:

    private static class Node<Customer> {
    private Customer data;
    private Node<Customer> next;

    private Node(Customer dataItem) {
        data = dataItem;
        next = null;
    }
    private Node(Customer dataItem, Node<Customer> nodeRef){
        data = dataItem;
        next = nodeRef;
    }
}

private Node<Customer> front;
private Node<Customer> rear;
private Node<Customer> ref;

public boolean offers(Customer e){
    if(size == 0){
        front = new Node<Customer>(e);
    }else if(size == 1){
        front.next = new Node<Customer>(e);
        ref = front.next;
    }else{
        ref.next = new Node<Customer>(e);
        ref = ref.next;
    }
    size++;
    CPH++;
    return true;
}

这是内部Iterator类:

    private class Iter implements Iterator<Customer>{
    private int count;
    private Node<Customer> obj;

    public Iter(){
        obj = front;
    }

    @Override
    public boolean hasNext(){
        return count < size;
    }

    @Override
    public Customer next(){
        if(!hasNext()){
            throw new NoSuchElementException();
        }
        Customer returnVal = obj.next.data;
        obj = obj.next;
        count++;
        return returnVal;
    }

希望这应该足以理解发生了什么。

0 个答案:

没有答案