0


スタックの配列を作成しようとしています。配列内の各スタックはタイプintです。

次のような配列を作成する  Stack<Integer>[] numbers = new Stack<Integer>[3]; と、コンパイルエラー" Cannot create a generic array of Stack<Integer>"が発生します。そのため、の代わりにワイルドカードタイプを使用してスタックの配列を作成しようとしていますが、このエラーは発生 Integerしません。ただし、次のように(ワイルドカード " "タイプの)  スタックの1つ

にプッシュしようとする と、コンパイルエラー" "が発生します。 では、どのようにしてタイプのスタックの配列を適切にインスタンス化できますか?現在のところ、これらのスタックでプッシュ/ポップ操作を実行することはできません... int?this.numbers[stackIndex].push(i);The method push(capture#1-of ?) in the type Stack<capture#1-of ?> is not applicable for the arguments (int)

int


これについての私の推論は、ハノイの塔ゲームをプログラムする試みです。Stack3つのロッドのそれぞれがタイプintであり、各リングがとして表されint、3つのロッドが一緒になって3つのスタックの配列として含まれるよう にしたかったのです。


次にいくつかのサンプルコードを示します。

import java.util.Stack;

public class StackTest {

    Stack<?>[] numbers;

    public StackTest(int stackLength) {
        this.numbers = new Stack<?>[stackLength];
    }

    public void fillStack(int stackIndex, int numRings) {
        for (int i = numRings; i >= 0; i--) {

            // this statement has a compile error!
            this.numbers[stackIndex].push(i);
        }
    }

    public static void main(String[] args) {
        int numberOfRods = 3;
        StackTest obj = new StackTest(numberOfRods);

        int rodNumber = 0, numberOfRings = 4;
        obj.fillStack(rodNumber, numberOfRings);
    }
} // end of StackTest


4

3 に答える 3

2

生である必要があります。そうでStack[]ない場合は、を使用できますList<Stack<YourClass>> lstStack = new ArrayList<Stack<YourClass>>()

この場合、私は使用したいと思います

List<Stack<Integer>> lstStack = new ArrayList<Stack<Integer>>(stackLength);
于 2013-03-20T17:06:39.420 に答える
1

1つの解決策は次のとおりです。

public class StackInteger extends Stack<Integer> {
}

その後:

StackInteger[] numbers = new StackInteger[3];

あるいは:

Stack<Integer>[] numbers = new StackInteger[3];
于 2013-03-20T17:11:47.190 に答える
0

私の推測では、 :Integerではなくプッシュする必要があります。int

this.numbers[stackIndex].push(Integer.valueOf(i));
于 2013-03-20T17:12:07.427 に答える