Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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/12.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中使用两个2D数组_Java_Arrays_Javafx - Fatal编程技术网

在Java中使用两个2D数组

在Java中使用两个2D数组,java,arrays,javafx,Java,Arrays,Javafx,我不知道该怎么称呼这个标题,但我的问题是: 我正在用JavaFX制作康威的生活游戏,我有两个不同大小的2D阵列。一个阵列用作游戏板/网格,另一个阵列用作我要插入到板上的图案。假设第一个阵列是60x60,第二个是3x3。 为了制作电路板和图案,我使用了如下方法: //Board for (int x = 0; x < 60; x++) { for (int y = 0; y < 60; y++) board[x][y].setNextState(false); gc

我不知道该怎么称呼这个标题,但我的问题是: 我正在用JavaFX制作康威的生活游戏,我有两个不同大小的2D阵列。一个阵列用作游戏板/网格,另一个阵列用作我要插入到板上的图案。假设第一个阵列是60x60,第二个是3x3。 为了制作电路板和图案,我使用了如下方法:

//Board
for (int x = 0; x < 60; x++) {
  for (int y = 0; y < 60; y++)
    board[x][y].setNextState(false);
    gc.setFill(Color.LIGHTGRAY);
    gc.fillRect(x * 10, y * 10, 9, 9);
  }
}

//Pattern
for (int x = 0; x < pattern.length; x++)
  for (int y = 0; y < pattern[x].length; y++)
    if (pattern[x][y] == 1) {
      board[x][y].setNextState(true);
    } else {
      board[x][y].setNextState(false);
    }
    gc.setFill(board[x][y].getState() ? Color.rgb(244, 92, 66) : Color.LIGHTGRAY);
    gc.fillRect(x * 10, y * 10, 9, 9);
  }
}
//电路板
对于(int x=0;x<60;x++){
对于(int y=0;y<60;y++)
线路板[x][y].setNextState(假);
gc.setFill(颜色为浅灰色);
gc.fillRect(x*10,y*10,9,9);
}
}
//图案
对于(int x=0;x
如上所述完成后,图案将放置在电路板的左上角。但是如果我想把它放在中间,我必须在模式循环中使用x=30和y=30,但是如果<模式[x] [y]=1)< /代码>行,那将不能在<代码>中工作。我怎样才能做到这一点


我很难解释,但我希望我能把问题说清楚

您可以这样实现:

for (int x = 0; x < pattern.length; x++) {
  for (int y = 0; y < pattern[x].length; y++) {
    int bx = x + 30,
        by = y + 30;
    if (pattern[x][y] == 1) {
      board[bx][by].setNextState(true);
    } else {
      board[bx][by].setNextState(false);
    }
    ...
for(int x=0;x

依此类推。

参考电路板时,将偏移量应用于xy位置,并在参考图案时保持不变。请注意,偏移量X不能>电路板宽度-图案宽度,与Y相同:

int offsetX = 30;
int offsetY = 30;
for (int x = 0; x < pattern.length; x++)
  for (int y = 0; y < pattern[x].length; y++)
    if (pattern[x][y] == 1) {
      board[x + offsetX][y + offsetY].setNextState(true);
    } else {
      board[x + offsetX][y + offsetY].setNextState(false);
    }
    gc.setFill(board[x + offsetX][y + offsetY].getState() ? Color.rgb(244, 92, 66) : Color.LIGHTGRAY);
    gc.fillRect((x + offsetX) * 10, (y + offsetY) * 10, 9, 9);
  }
}
int offsetX=30;
int offsetY=30;
对于(int x=0;x
pattern
似乎不是2D数组,所以不能使用
pattern[x][y]==1
@ShekkarRaee抱歉,我在发布的代码片段中没有指定它。我创建了int[][]模式={{0,1,0},{0,0,1},{1,1,1};,所以这不是问题所在。我可以在黑板上画出图案,我只是不能把它放在左上角以外的任何地方。你必须定义图案相对于黑板左上角的位置。假设我们将它们称为
posX
posY
,每次您将参考一个图案元素相对于电路板的位置,位置将是
x+posX
/
y+posY
我正在尝试这样做,但我得到一个数组索引越界错误。我还尝试了if(pattern[x-patternX][y-patternY]),因为模式只有3x3,但这给了我同样的错误