2D数组通过从0到数组大小的位置编号获取行和列



例如,我有一个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;

最新更新