我怎样才能实例类型为int栈的数组?(How can I instantiate an array

2019-11-01 19:57发布


我想创建堆叠的阵列,其中所述阵列中的每个堆的类型为int

如果我创建这样的阵列: Stack<Integer>[] numbers = new Stack<Integer>[3]; 中,在编译错误“ Cannot create a generic array of Stack<Integer> ”。 所以,我想创建堆栈与通配符类型而非阵列Integer ,它再没有这个错误。

但是,如果我然后试图推动一个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 ? 截至目前,我不能够对这些堆栈进行推/弹出操作...


我在这个推理是汉诺塔的游戏程序的尝试。 我想每三根棒的是一个Stack型的int ,每个环被表示为int和三个杆一起被包含作为三个堆块的阵列。


下面是一些示例代码:

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


Answer 1:

它必须是一个原始Stack[]也可以使用List<Stack<YourClass>> lstStack = new ArrayList<Stack<YourClass>>()

在这种情况下,我宁愿使用

List<Stack<Integer>> lstStack = new ArrayList<Stack<Integer>>(stackLength);


Answer 2:

一种解决方案可能是:

public class StackInteger extends Stack<Integer> {
}

接着:

StackInteger[] numbers = new StackInteger[3];

甚至:

Stack<Integer>[] numbers = new StackInteger[3];


Answer 3:

我的猜测是,你要推动一个Integer ,而不是int

this.numbers[stackIndex].push(Integer.valueOf(i));


文章来源: How can I instantiate an array of Stacks of type int?