有没有办法让这段代码更有效率?
问题描述:
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行。有没有办法让这段代码更有效率?
答
看看ArrayIndexOutOfBoundsException
。
抛出以指示已使用非法索引访问数组。索引或者是负数,或者大于或等于数组的大小。
if(CurrentGen[yCoordinate + yNeighbour][xCoordinate + xNeighbour] == 1)
您正在访问CurrentGen
。 yCoordinate + yNeighbour
或xCoordinate + xNeighbour
等于-2
。数组从索引0
开始。
http://codereview.stackexchange.com/ – 2014-11-21 15:28:43
首先解决它,然后考虑让它更有效率。 – Maroun 2014-11-21 15:29:54
请显示您用作输入的数据,调用,结果和预期结果。也chage int NeighbourCounter = 0;以小写int int neighbourCounter = 0; – MihaiC 2014-11-21 15:30:37