Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 在多维数组中创建对象时出现问题_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 在多维数组中创建对象时出现问题

Java 在多维数组中创建对象时出现问题,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我目前在Java中使用二维数组创建对象时遇到了一个问题 我喜欢在游戏板上显示砖块(就像在经典的“突破游戏”中一样),因此我为石头对象创建了一个类“石头”,该类的构造函数是: public Stone (Position pos, int value){ this.pos = pos; this.type = type; } 我还为石头的图案创建了一个名为“stoneTypes”的2D数组(int),其中保存了一个JSON文件中的矩阵 我现在想通过使用stoneTypes矩阵的值

我目前在Java中使用二维数组创建对象时遇到了一个问题

我喜欢在游戏板上显示砖块(就像在经典的“突破游戏”中一样),因此我为石头对象创建了一个类“石头”,该类的构造函数是:

public Stone (Position pos, int value){
    this.pos = pos;
    this.type = type;
}
我还为石头的图案创建了一个名为“stoneTypes”的2D数组(int),其中保存了一个JSON文件中的矩阵

我现在想通过使用stoneTypes矩阵的值在我的类“Level”中创建石头对象,目前看起来是这样的(我包括了一个if条件,因此石头对象仅为stoneTypes值>=1创建):

在我的“Field”类中绘制石头的方法目前如下所示:

private void drawStones(Graphics2D g2) {
stones = view.getGame().getLevel().getStones();
  for (int i = 0; i < stones.length; i++) {
    for (int j = 0; j < stones[i].length; j++) {
    ***     int x_position = (int) stones[i][j].getPosition().getX();           ***
            int y_position = (int) stones[i][j].getPosition().getY();
            g2.fillRoundRect(x_position, y_position, 
                    (int) ((double)Constants.SCREEN_WIDTH/Constants.SQUARES_X)-2, 
                    (int) ((double)Constants.SCREEN_HEIGHT/Constants.SQUARES_Y)-2 ,1,1);
            System.out.println(x_position);
    }
  }
}
private void drawStones(图形2D g2){
stones=view.getGame().getLevel().getStones();
for(int i=0;i
Eclipse没有显示任何语法错误,但在我启动程序时,我确实会在标记为***的位置收到一个NullPointerException。我不确定我的get方法是否没有正确实现,或者创建新Stone对象的过程是否完全错误。我尝试了数百种方法,但都找不到解决方案,我希望你们可以n帮帮我

提前谢谢,Scoopa!

这里:

if (stoneTypes [w][h] >= 1) {
  Position pos = new Position(width * w, height * h);
  this.stones[w][h] = new Stone(pos, stoneTypes[w][h]);
}
您仅在满足该条件时创建新的石头。所有其他字段将保留其默认初始值。该值为:null

当你这样做时,你不能(无条件地)进去做:

你需要一个

if (stones[i][j] != null) 

为了保护这样的访问!

并非数组中的所有元素都将包含
Stone
对象,
if(stoneTypes[w][h]>=1){
我感谢您的快速接受!非常感谢,这立即解决了我的问题,节省了我一天的时间!
if (stoneTypes [w][h] >= 1) {
  Position pos = new Position(width * w, height * h);
  this.stones[w][h] = new Stone(pos, stoneTypes[w][h]);
}
int x_position = (int) stones[i][j].getPosition().getX()
if (stones[i][j] != null)