2014-11-21 115 views
-2
public int Neighbours(int xCoordinate, int yCoordinate) 
{ 
    xCoordinate -= 1; 
    yCoordinate -= 1; 
    int NeighbourCounter = 0; 
    int incrementer = 0; 
    int m1 = -1; //istart 
    int n1 = -1; //jstart 
    int m2 = 1; //iend 
    int n2 = 1; //jend 

    if (xCoordinate == 0) 
    { 
     m1 = 1; 
    } 

    if (yCoordinate == 0) 
    { 
     n1 = -1; 
    } 

    if (xCoordinate + 1 == yLen) 
    { 
     m2 = 0; 
    } 

    if (yCoordinate + 1 == xLen) 
    { 
     n2 = 0; 
    } 

    for (int xNeighbour = m1; xNeighbour <= m2; xNeighbour++) 
    { 
     if (xNeighbour == 0) 
     { 
      incrementer = 2; 
     } 
     else 
     { 
      incrementer = 1; 
     } 

     for (int yNeighbour = n1; yNeighbour<n2; yNeighbour += incrementer) 
     { 
      if (CurrentGen[yCoordinate + yNeighbour][xCoordinate + xNeighbour] == 1) 
      { 
       NeighbourCounter++; 
      } 

     } 
    } 
    return NeighbourCounter; 
} 

是否有可能让此代码更有效?此代码适用于我的生命游戏项目,当我尝试为下一代人生游戏运行此代码时,似乎出现错误。对于我的NextGeneration,我似乎获得了ArrayOutOfBoundsException: -2。此错误发生在第45行。有没有办法让这段代码更有效率?

+3

http://codereview.stackexchange.com/ – 2014-11-21 15:28:43

+3

首先解决它,然后考虑让它更有效率。 – Maroun 2014-11-21 15:29:54

+0

请显示您用作输入的数据,调用,结果和预期结果。也chage int NeighbourCounter = 0;以小写int int neighbourCounter = 0; – MihaiC 2014-11-21 15:30:37

回答

0

看看ArrayIndexOutOfBoundsException

抛出以指示已使用非法索引访问数组。索引或者是负数,或者大于或等于数组的大小。


if(CurrentGen[yCoordinate + yNeighbour][xCoordinate + xNeighbour] == 1) 

您正在访问CurrentGenyCoordinate + yNeighbourxCoordinate + xNeighbour等于-2。数组从索引0开始。

相关问题