【发布时间】:2011-06-23 01:56:29
【问题描述】:
抱歉,请继续我在这里提出的问题:here 我正在尝试运行此方法以从双面队列(deque)中删除通用值(EltType),但我一直收到错误消息,我调用 insertFirst 两次,并将值“3”插入数组两次,然后,当我运行 removeFirst 时,它会打印一次“3”,然后打印出“Null”。有人能帮帮我吗?
class ArrayBasedDeque<EltType> {
private final int CAPACITY = 10;
private int capacity;
private int end;
private EltType deque[];
public ArrayBasedDeque() {
this.capacity = CAPACITY;
deque = (EltType[]) (new Object[capacity]);
}
public EltType removeFirst() {
EltType[] tempArray;
EltType returned = deque[0];
tempArray = (EltType[]) new Object[capacity];
for (int i=1;i<capacity;i++) {
tempArray[i-1] = deque[i];
}
deque = tempArray;
return returned;
}
public boolean isEmpty() {
return end == 0;
}
public void insertFirst(EltType first) {
if(!isEmpty()) {
EltType[] tempArray;
tempArray = (EltType[]) new Object[capacity+1];
for (int i=0;i<deque.length;i++) {
tempArray[i+1] = deque[i];
}
deque = tempArray;
}
deque[0] = first;
}
}
谢谢你:)
【问题讨论】:
-
你为什么要像这样投射一个新数组?为什么不直接创建这种类型的数组?
deque = (EltType[]) (new Object[capacity]) -
您自己实施这个有什么特别的原因吗?作业,自我提升,否则呢?如果没有,您可能需要考虑使用 java.util.ArrayDeque。
-
@Joe Phillips - 这在 Java 中不起作用,试试吧。它返回一个错误,这是泛型类型的不幸特征!