2014-11-21 117 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開始。

相關問題