2016-10-15 2 views
-4

У меня есть этот код здесь, и я хотел бы проверить все значения вокруг случайной точки и посмотреть, является ли это == 1, но если я проверю любое значение на границе массива, я получаю ошибку «ArrayIndexOutOfBoundsException». Я пробовал много вещей, но не могу заставить его работать. Любая помощь будет оценена!Как проверить границы без ошибок?

 if (arr[i + 1][j] == 1) { 
      arr[i][j] = 1; 
      return true; 
     } 
     else if (arr[i - 1][j] == 1) { 
      arr[i][j] = 1; 
      return true; 
     } 
     else if (arr[i][j + 1] == 1) { 
      arr[i][j] = 1; 
      return true; 
     } 
     else if (arr[i][j - 1] == 1) { 
      arr[i][j] = 1; 
      return true; 
     } 
     else { 
      return false; 
     } 
+0

ваш код пытается получить доступ к элементу по индексу, который не доступен в массиве, так просто отладки кода, проверьте длину массива и индексы, которые вы используете, потому что ваш код неполный, поэтому никто не сможет рассказать вам о точном проблемном коде –

+0

. Мое первое предположение заключается в том, что в любом цикле, который вы используете для достижения i & j, вы не вычисляете тот факт, что массивы начинаются при индексе 0 и, таким образом, пытаются найти индекс массива, который равен его размеру (зная, что последний элемент массива равен 1 arraySize) –

+0

Мне известно о проверке границ. Мне все равно нужно сравнивать эти точки, и мне нужен способ сделать это, не получив ошибку. Я пробовал много способов избежать этого, но я заработал. –

ответ

-1

Если i является 0, конечно, было бы исключение, потому что i - 1 является -1, который не является допустимым индексом для массива.

Для этого необходимо сначала убедиться, что индексы не выходят за пределы массива, затем проверить, соответствуют ли элементы по индексам 1 или нет.

Написано много, если заявление раздражает, не так ли? Таким образом, вы, вероятно, следует создать массив индексов, которые вы хотите проверить и манипулировать, что:

int[] iArray = { i + 1, i - 1, i, i }; 
int[] jArray = { j, j, j + 1, j - 1 }; 
for (int k = 0 ; k < iArray.length ; k++) { 
    if (iArray[k] < 20 && iArray[k] >= 0 && jArray[k] < 20 && jArray[k] >= 0) { 
     if (arr[iArray[k]][jArray[k]] == 1) { 
      arr[i][j] = 1; 
      return true; 
     } 
    } 
} 
Смежные вопросы