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 に答える