2016-04-02 57 views
0

Ben gemide her alan için bellek tutmak için 2d dizi kullandığım bir Othello/Reversi oyun yapıyorum. Geçerli hamle kontrol etmek amacıylaDizinin sınırının dışında dizin nasıl önlenir?

i aynı satırda birlikte sonraki alanını kontrol etmek için r + 1 kullandığım bir eğer deyimi kullanıyorum. Ben bir durumla karşılaştığınızda r 8 olduğu dizi, yalnızca [8, 8] büyüktür Ancak gibi dizideki 9 elemanını kontrol etmeye çalışıyor çünkü bir hata alıyorum. Bu bana sınırlar dışı bir dizin veriyor.

iyi yolu bu olacaktır düzeltmek için merak mıydı? Belki bir listeye takas düşündü ama bu 2d dizisi için de çalışacaktır eğer ben emin değilim?

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

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

Nasıl önlenir? Sınırların dışında kalmamak için dizini kontrol edin. :-) –

+0

"Length" özelliğini veya "Length()" yöntemini kullanıp – Ian

+0

dizisini Array boyutu için bir const kullanın; böylece boyutu doğrulayabilirsiniz. const int SIZE = 8; – jdweng

cevap

1

sadece r + 1 yasal endeks olup olmadığını kontrol etmek gerekir. Listenin olması, listenin sınırlarının ötesini hala kontrol ettiğiniz için yardımcı olmayacaktır. Dolayısıyla, dizininizin boyutunu bildiğiniz gibi

. Ancak "sihirli numaralar" Eğer dizinin ilk boyutunun üst sınırı alma daha iyi olurdu önlemek için: Sen c olmadığını kontrol için aynı şeyi yapabilirsiniz

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

sınırlar içinde geçerli:

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