【问题标题】:Queue RingBuffer implements Queue12. Doesn't work队列 RingBuffer 实现了 Queue12。不工作
【发布时间】:2011-08-24 04:07:39
【问题描述】:

我的代码编译但不工作。我想我没有打字对吗?有人可以向我解释一下 wrapIdx 方法返回索引 % 容量。我真的不明白该代码如何包装数组。当它到达数组索引的末尾时 % 容量将返回 1,但数组不是从 0 索引开始的吗?

这是我的代码,我正在实现一个 Queue12 接口。在我让它工作之后,我可以制作一个测试类来检查它是否有效吗?

import java.util.NoSuchElementException;


public class QueueImpl12<T> implements Queue12<T> 
{

private int _size, _backIdx, _frontIdx;
private static final int _defaultCapacity = 128;
private T[] _ringBuffer;



public QueueImpl12(int capacity)
{
    _ringBuffer = (T[]) new Object[capacity];
    clear();    
}


public QueueImpl12()
{
    _ringBuffer = (T[]) new Object[_defaultCapacity];
    clear();
}

private int wrapIdx(int index)
{

    return index % capacity();
}



public void clear() 
{
    _backIdx = 0;
    _frontIdx = 0;
    _size = 0;

}

@Override
public int capacity() 
{
    // TODO Auto-generated method stub
    return _ringBuffer.length;
}

@Override
public int size() 
{
    // TODO Auto-generated method stub
    return _size;
}

@Override
public boolean enqueue(T o) 
{
    //add o to back of queue


    if(_ringBuffer.length == _size)
    {
        return false;
    }


       _ringBuffer[_backIdx] = o;
        _backIdx = wrapIdx(_backIdx + 1 );
        _size++;





    return true;
}

@Override
public T dequeue()
{
    if(_size == 0)  //empty list
    {
        throw new NoSuchElementException();
    }

    T tempObj = _ringBuffer[_frontIdx];     //store frontIdx object
    _ringBuffer[_frontIdx] = null;          
    _frontIdx++;



    _size--;
    return tempObj;
}

@Override
public T peek() 
{

    return _ringBuffer[_frontIdx];
}

}

【问题讨论】:

    标签: java arrays circular-buffer


    【解决方案1】:

    所以这里首先要注意的是模运算符% 返回除法的余数。任何模数本身都是 0,因此当您达到队列的最大容量时,它将返回 0,这是您将开始的索引。如果代码在结束时返回 1,则说明您遇到了一个问题。

    【讨论】:

    • 前面索引和当前索引一样吗?
    • 仅当front和current相等0
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2012-01-23
    • 2016-04-10
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多