Java:2d数组 - 使它像"圆环"一样

Bła*_*lik 3 java computer-science

我面临以下问题:

我有一块大小为M × N的方块.在java中制作它的最佳方法是什么,当给定的坐标超出界限(或带负值)时,它将从棋盘的另一侧返回方形?我正在寻找一些切割器使用数学.可能是模数运算符,但我希望它能用于负值.怎么做对了?

例如:

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

aio*_*obe 9

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

(n % SIZE + SIZE) % SIZE
Run Code Online (Sandbox Code Playgroud)

但是,我会将它封装在一个函数中,而不是用这些公式来混淆代码:

int getCell(int i, int j) {
    return board[(i % M + M) % M]
                [(j % N + N) % N];
}
Run Code Online (Sandbox Code Playgroud)