0


我正在尝试创建一个堆栈数组,其中数组中的每个堆栈都是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)”。

那么,我怎样才能正确地实例化一个 Stacks 类型的数组int呢?截至目前,我无法在这些堆栈上执行推送/弹出操作......


我的推理是尝试对河内塔游戏进行编程。我希望三个杆中的每一个都是 aStack类型int,每个环都表示为int,并且三个杆一起包含为三个 Stacks 的数组。


这是一些示例代码:

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

一种解决方案可能是:

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 回答