例如,我有一个2d数组设置如下:
+---+---+---+---+---+
| | | | | |
|0 |1 |2 |3 |4 |
+---+---+---+---+---+
| | | | | |
|5 |6 |7 |8 |9 |
+---+---+---+---+---+
| | | | | |
|10 |11 |12 |13 |14 |
+---+---+---+---+---+
| | |OOO| | |
|15 |16 |OOO|18 |19 |
+---+---+---+---+---+
| | | | | |
|20 |21 |22 |23 |24 |
+---+---+---+---+---+
里面的0是我放在第17位的。然而,我实际上是想把0放在第7位。我用用户输入的其中一个数字来做。
要获取行和列的值,我使用
int row = Math.floorDiv(size*size - 1, space);
int col = space % size;
其中size
是行/列的长度(在本例中为5,它总是一个正方形数组),space
是我试图将o放入的"单元格"的数量。
我知道列函数工作正确,但我似乎不知道如何计算行。
编辑:感谢Cinnam和Nayuki Minase;答案是space / size
。所以,我要问一个不同的问题,我也不确定能不能克服。当放置棋子时,我必须检查它的北、西、东和南的空间是否被其他玩家占据。为此,我使用代码
if((board[row][col+1] == otherPlayerInt)
|| (board[row][col-1] == otherPlayerInt)
|| (board[row+1][col] == otherPlayerInt)
|| (board[row][col-1]==otherPlayerInt)){
return false;
}
其中另一个玩家用负整数表示。如果我这样做,但是,这块是放在边缘上,我将得到一个ArrayOutOfBoundsException。我有什么办法可以克服这个问题?
简洁的回答:
int row = space / size;
int col = space % size;
和逆运算:
int index = row * size + col;