0

我有一个有块的类FloorStack我不知道如何初始化它。我试过这样:

public class Floor {
    private Stack<Block> stack;
    private static int size;
    public void setStack(Stack<Block> stack) {
        this.stack = stack;
    }
    public void addBlock(Block b){
        stack.push(b);
    }
}

public class InputDevice {
    Block a0=new Block('I',false);
    Floor [] floor=new Floor[5];
    Stack<Block> stack=new Stack<Block>();
    floor[0].setStack(stack);
    floor[0].addBlock(a0);
}
4

3 回答 3

5
Floor [] floor=new Floor[5];

你声明了数组,但你没有初始化元素,然后:

floor[0].setStack(stack);floor[0] 为空,npe!

另外我建议在你的Floor类,addBlock(Block b)方法中,检查堆栈是否为空,如果为空,否则如果有人初始化Floor,就会有问题(NPE),直接使用floor.addBlock(b)。

于 2013-01-12T11:33:47.900 回答
2

您尚未初始化数组中的任何 Floor 对象。当您创建一个对象数组时,就像创建一个鸡蛋盒一样。在您先将一些鸡蛋放入纸箱之前,您不能使用任何鸡蛋。在初始化数组之前,您不能使用数组中的任何对象,这通常在 for 循环中完成。IE,

Floor [] floor=new Floor[5];
for (int i = 0; i < floor.length; i++) {
  floor[i] = new Floor();
}
于 2013-01-12T11:32:32.377 回答
0

试试这个代码

public class Floor {
    private Stack<Block> stack;
    private static int size;
    public void setStack(Stack<Block> stack) {
        this.stack = stack;
    }
    public void addBlock(Block b){
        stack.push(b);
    }
}

public class InputDevice {
    Block a0=new Block('I',false);
    Floor [] floor=new Floor[5];
    floor[0] = new Floor();
    Stack<Block> stack=new Stack<Block>();
    floor[0].setStack(stack);
    floor[0].addBlock(a0);
}
于 2013-01-12T11:35:56.473 回答