Uygulama için mayın tarama tekniğini yeniden yapıyorum ve IndexOutOfBounds hatalarını önlemek için bu küçük kodu yazdım. Bundan kaçınmanın bir yolu var mı? Bu yüzden, her olası hatayı bir if ifadesiyle açıkça yazmak zorunda değilim. Her dizimi 2 dizini daha büyük yapmayı ve sadece ilk ve son dizini görmezden gelmeyi düşündüm. Belli bir şey eksik miyim?Bu kod bloğundan kaçınmanın bir yolu var mı?
if (row > 0 && col > 0)
ray[row - 1][col - 1] += 1;
if (row > 0)
ray[row - 1][col] += 1;
if (row > 0 && col < height - 1)
ray[row - 1][col + 1] += 1;
if (col > 0)
ray[row][col - 1] += 1;
if (col < height - 1)
ray[row][col + 1] += 1;
if (row < width - 1 && col > 0)
ray[row + 1][col - 1] += 1;
if (row < width - 1)
ray[row + 1][col] += 1;
if (row < width - 1 && col < height - 1)
ray[row + 1][col + 1] += 1;
Bir şey biraz uzak görünüyor. Neden "row = 3" ise 2'de başlamak istersiniz? – Makoto
havalı. Ayrıca, min/max kullanarak daha açık olacaktır 'startRow = max (0, satır-1)' – ZhongYu
@Makoto Sorunun içindeki kod tüm ışın [row] [col] 'ın komşuları etrafında dolaşıyor. Yani satır = 3' ise, eğer varsa, 2. hücreden 4. satıra tüm hücreleri kontrol etmek isteriz. –