EStack类工作正常并给出结果输出(它取出顶部元素并将其副本放在方法下推中指定的堆栈的任何位置)。
但是,我只能让它适用于整数(因此将大部分内容转换为整数)。我怎么能让它适用于放在堆栈中的任何类型的对象(int,string,char,double,float等)?
import java.util.*;
public class EStack extends Stack{
public static void pushdown(Stack s, int i){
Integer marker = (Integer) s.size() - i;
Integer top = (Integer) s.peek();
Stack temp = new Stack();
while(s.empty() != true){
Integer elem = (Integer) s.pop();
temp.push(elem);
}
while(temp.empty() != true){
if(marker == s.size()){
s.push(top);
}
Integer elem = (Integer) temp.pop();
s.push(elem);
}
}
public static void main(String[] args){
Stack s = new Stack();
s.push(1);
s.push(2);
s.push(3);
s.push(4);
pushdown(s, 2);
while(s.empty() != true){
System.out.println(s.pop());
}
}
}
输出:
4
3
4
2
1
答案 0 :(得分:1)
我认为这会有效,因为Stack接收Object
:
public static void pushdown(Stack s, int i){
Integer marker = (Integer) s.size() - i;
Object top = s.peek();
Stack temp = new Stack();
while(s.empty() != true){
Object elem = s.pop();
temp.push(elem);
}
while(temp.empty() != true){
if(marker == s.size()){
s.push(top);
}
Object elem = temp.pop();
s.push(elem);
}
}
基本上我删除了所有整数演员。
答案 1 :(得分:0)
看一下java.util.Stack(你正在扩展)是如何用泛型做的。这是 Oracle generics documentation
如果你看一下java.util.Stack,你会注意到它实际上被称为Stack<E>
,它可以被读作“E类型的一堆对象”,在整个类中,通常都是作为堆栈中对象的类型(在您的情况下为整数),而不是“E”。