我的代码可以编译,但不能工作。我想我没有排版,对吧?有人能给我解释一下wrapIdx方法返回索引%的容量吗?我真的不明白这些代码是如何包装数组的。当它到达数组索引的末尾时,% at将返回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];
}
}发布于 2011-08-24 22:11:42
这里要注意的第一件事是,模运算符%返回除法的剩余部分。任何模数本身都是0,因此当你达到队列的最大容量时,它将返回0,这是你将开始的索引。如果代码到达末尾时返回1,则存在一个问题。
https://stackoverflow.com/questions/7170323
复制相似问题