Processing.Org:模数问题

时间:2011-12-04 17:47:42

标签: java modulo processing

我正在编写一个使用16x16网格物体的2D元胞自动机。对象存储在表示网格的多维数组中。要计算下一代的值,我需要检查周围单元格的状态(打开或关闭)。如果要检查的单元格位于网格的边缘,那么我想让方法环绕网格,

我使用下面的方法执行此操作,但使用模运算符遇到问题:

// Scan neighbours, find out how many are active
int findNeighbours(int x, int y) {

int count = 0;

for(int i = -1; i<1; i++) {
  for(int j = -1; j<1; j++) {

  // Grid size is 16
  int xPos = (x+i)%gridSize;
  int yPos = (y+j)%gridSize;

     // Check state
     if(grid[xPos][yPos].on == true) {
      count++;
     }
    }
   }
 return count++;
}

问题是,我希望:

(-1) mod 16 = 15

相反,我得到:

(-1) mod 16 = -1

导致越界错误。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

您可以将除数添加到被除数中,直到它为正数。一些例子说明了它的工作原理:

5 % 16 = 5

(5 + 16) % 16 = 5

(-1 + 16) % 16 = 15

我认为Andreas的评论解释了为什么Java会比我更好地评估%运算符,但希望这能解决你的问题。