0

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
4

2 回答 2

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);
    }
}

基本上我删除了所有的整数演员表。

于 2013-11-07T21:35:56.160 回答
0

看看 java.util.Stack (你正在扩展的)是如何使用泛型的。这是 Oracle 泛型文档

如果您查看 java.util.Stack,您会注意到它实际上被称为Stack<E>,可以将其读作“E 类型的对象堆栈”,并且在整个类中,其中通常会有对象的类型在堆栈(在您的情况下为整数),而是“E”。

于 2013-11-07T21:33:54.093 回答