二维数组 - 使其成为 "torus"

2D array - making it "torus" like

我面临以下问题:

我有一块大小为 MxN 的棋盘。 在 Java 中,最好的方法是什么,当给定的坐标超出范围(或负值)时,它会 return 从棋盘的另一边正方形?我正在寻找一些数学的切肉刀用途。可能是模数运算符,但我希望它适用于负值。怎么做才对?

例如:

当 M = N = 10

//Pseudocode of course
int[10][10] board

//Counting elements from 0, so 10 would normally generate array OOB exception
//I want it to work like this:
board[-1][10] == board[9][0]

您将使用模运算符。一个常用的公式(对于任意大的正/负整数)是:

(n % SIZE + SIZE) % SIZE

不过,我不会用这些公式使代码混乱,而是将其封装在一个函数中:

int getCell(int i, int j) {
    return board[(i % M + M) % M]
                [(j % N + N) % N];
}