Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实例化int类型的堆栈数组?_Java_Arrays_Stack_Wildcard_Towers Of Hanoi - Fatal编程技术网

Java 如何实例化int类型的堆栈数组?

Java 如何实例化int类型的堆栈数组?,java,arrays,stack,wildcard,towers-of-hanoi,Java,Arrays,Stack,Wildcard,Towers Of Hanoi,我试图创建一个堆栈数组,其中数组中的每个堆栈的类型都是int。 如果我像这样创建数组:Stack[]numbers=newstack[3],出现编译错误“无法创建堆栈的通用数组”。因此,我尝试创建通配符类型的堆栈数组,而不是Integer,然后它就没有这个错误了。 但是,如果我尝试将int按如下方式推入其中一个堆栈(通配符“?”类型):this.numbers[stackIndex].push(I),存在编译错误“类型堆栈中的方法push(capture#1-of?)不适用于参数(int)”


我试图创建一个堆栈数组,其中数组中的每个堆栈的类型都是
int


如果我像这样创建数组:
Stack[]numbers=newstack[3],出现编译错误“
无法创建堆栈的通用数组”。因此,我尝试创建通配符类型的堆栈数组,而不是
Integer
,然后它就没有这个错误了。

但是,如果我尝试将
int
按如下方式推入其中一个堆栈(通配符“
”类型):
this.numbers[stackIndex].push(I),存在编译错误“
类型堆栈中的方法push(capture#1-of?)不适用于参数(int)
”。

那么,如何正确地实例化
int
类型的堆栈数组呢?到目前为止,我无法在这些堆栈上执行推/弹出操作。。。


我的理由是试图对河内塔游戏进行编程。我希望三根棒中的每一根都是
int
类型的
Stack
,每个环都表示为
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
import java.util.Stack;
公共类堆栈测试{
堆栈[]编号;
公共堆栈测试(int stackLength){
this.numbers=新堆栈[堆栈长度];
}
公共空白填充堆栈(int stackIndex,int numRings){
对于(int i=numRings;i>=0;i--){
//此语句有编译错误!
这个.numbers[stackIndex].push(i);
}
}
公共静态void main(字符串[]args){
int numberOfRods=3;
StackTest obj=新的StackTest(棒数);
int rodname=0,numberOfRings=4;
对象填充堆栈(rodNumber,numberOfRings);
}
}//堆栈测试结束


它必须是原始的
堆栈[]
,或者您可以使用
列表lstStack=new ArrayList()

在这种情况下,我更愿意使用

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

它必须是原始的
堆栈[]
,或者您可以使用
List lstStack=new ArrayList()

在这种情况下,我更愿意使用

List<Stack<Integer>> lstStack = new ArrayList<Stack<Integer>>(stackLength);
List lstStack=newarraylist(stackLength);
一种解决方案可以是:

public class StackInteger extends Stack<Integer> {
}
甚至:

Stack<Integer>[] numbers = new StackInteger[3];
Stack[]number=新的StackInteger[3];
一种解决方案可以是:

public class StackInteger extends Stack<Integer> {
}
甚至:

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

我的猜测是您应该推送一个
整数,而不是
int

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

我的猜测是您应该推送一个
整数而不是
int

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

谢谢你的快速回复!但是,当我将其更改为原始
堆栈[]
时,我收到警告“
堆栈是原始类型。对泛型类型堆栈的引用应参数化”
”。是否有办法避免此警告?@IanCampbell是的,使用第二种方法。再次感谢@Luiggi,但是当我尝试第二种方法时,我得到了编译错误“
类型列表不是泛型的;它不能用参数参数化”
@IanCampbell您确定使用的是
java.util.List
?@IanCampbell请参阅,谢谢您的快速回复!但是,当我将其更改为原始
堆栈[]
时,我收到警告“
堆栈是原始类型。对泛型类型堆栈的引用应参数化”
”。是否有办法避免此警告?@IanCampbell是的,使用第二种方法。再次感谢@Luiggi,但是当我尝试第二种方法时,我得到了编译错误“
类型列表不是泛型的;它不能用参数参数化”
@IanCampbell您确定使用的是
java.util.List
?@IanCampbell请参考我喜欢这个解决方案,但是当我将第5行更改为
堆栈编号时和第8行到
this.numbers=新堆栈[堆栈长度]
,我得到警告“
类型安全:类型Stack[]的表达式需要未经检查的转换以符合Stack[]
”。我喜欢这个解决方案,但是当我将第5行更改为
堆栈编号时和第8行到
this.numbers=新堆栈[堆栈长度]
,我得到警告“
类型安全:类型Stack[]的表达式需要未经检查的转换才能符合Stack[]
”。感谢@sp00m,这很有趣,但是当我这样做时,我得到警告“
可序列化类StackInteger没有声明类型为long的静态最终SerialVersionID字段
”感谢@sp00m,这很有趣,但是当我这样做时,我得到警告“
可序列化类StackInteger没有在类声明上声明long类型的静态最终serialVersionUID字段。