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

xSp*_*nCx 2 java arrays multidimensional-array

例如,我有一个像这样设置的二维数组:

+---+---+---+---+---+ 
|   |   |   |   |   | 
|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 | 
+---+---+---+---+---+ 
Run Code Online (Sandbox Code Playgroud)

其中 o 是我放置在位置 17 的位置。但是,我实际上是尝试将 o 放置在位置 7 的。我正在接受用户输入这些数字之一来执行此操作。

为了获取行和列的值,我使用

int row = Math.floorDiv(size*size - 1, space);
int col = space % size; 
Run Code Online (Sandbox Code Playgroud)

其中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;
    }
Run Code Online (Sandbox Code Playgroud)

其中另一个玩家用负整数表示。如果我这样做,并且该块被放置在边缘上,我将得到一个 ArrayOutOfBoundsException。我可以通过哪些方法来克服这个问题?

Nay*_*uki 6

一个简洁的答案:

int row = space / size;
int col = space % size;
Run Code Online (Sandbox Code Playgroud)

以及逆运算:

int index = row * size + col;
Run Code Online (Sandbox Code Playgroud)