我想扩展stackArray作为后修复评估程序。如果在数组堆栈中推送的元素数量(推方法)超过了堆栈长度,则expand()方法将使数组堆栈的长度加倍,并且还将arrayStack中的所有元素复制到stackExtend中。我的错误消息是我无法在push方法中对通用类型T调用expand方法。
private void expand(){
// TODO Implement this method.
@SuppressWarnings("unchecked")
T[] stackExtend = (T[])new Object[stackArray.length*2];
for (int i = 0; i < INITIAL_LENGTH; i++) {
stackExtend[i] = stackArray[i];
}
stackArray = stackExtend;
}
@Override
public void push(T elem){
if (top == stackArray.length) {
stackArray.expand();
stackArray[top] = elem;
top++;
}
else {
stackArray[top] = elem;
top++;
}
}
}
答案 0 :(得分:0)
我将按以下方式重构push
方法。
@Override
public void push(T elem){
if (top == stackArray.length) {
expand();
}
stackArray[top] = elem;
top++;
}
因此,这消除了一些重复的代码。
但更重要的是,expand
是您要在当前对象上调用的方法,而不是数组类型的方法。因此,在调用T[]
数组时是错误的。
只需编写expand()
即可在当前对象上调用该方法。