2016-04-02 17 views
0

Ich mache ein Othello/Reversi-Spiel, wo ich ein 2D-Array verwenden, um den Speicher für jedes Feld auf dem Brett zu halten.Wie vermeidet man den Index außerhalb der Grenzen des Arrays?

Um nach gültigen Bewegungen zu suchen, verwende ich eine if-Anweisung, wo ich r + 1 verwende, um den nächsten Abstand entlang der gleichen Zeile zu prüfen. Da das Array jedoch nur [8, 8] groß ist, erhalte ich einen Fehler, wenn ich auf eine Situation stoße, in der r 8 ist, weil es versucht, das 9. Element im Array zu überprüfen. Dies gibt mir einen Index außerhalb des zulässigen Bereichs.

Fragen, was wäre der beste Weg, um dies zu beheben wäre? Ich dachte, vielleicht zu einer Liste zu wechseln, aber ich bin mir nicht sicher, ob das auch für ein 2d-Array funktioniert?

public box[,] grid = new box[8, 8]; 

if ((grid[r + 1, c].value == currentPlayer) 
     { 
      return true; 
     } 
+0

Wie vermeiden? Überprüfen Sie, ob der Index nicht außerhalb der Grenzen liegt. :-) –

+0

Verwenden Sie 'Length' Eigenschaft oder' Length() 'Methode – Ian

+0

Verwenden Sie eine Konstante für die Größe von Array, damit Sie die Größe überprüfen können. const int GRÖSSE = 8; – jdweng

Antwort

1

Sie müssen nur prüfen, ob r + 1 ein Recht Index ist. Eine Liste zu haben wird nicht helfen, da Sie immer noch über die Grenzen der Liste hinaus prüfen werden. Sie brauchen also einfach:

if (r + 1 > 7) return false; 

wie Sie die Größe Ihres Arrays kennen. Jedoch zu vermeiden „magische Zahlen“ Sie besser dran sein würden immer die obere Grenze der ersten Dimension des Arrays:

if (r + 1 > grid.GetUpperBound(0)) return false; 

Sie die gleichen dass c zur Überprüfung tun können, ist in Grenzen:

if (c < 0 || c > grid.GetUpperBound(1)) return false; 
Verwandte Themen