2016-10-15 2 views
-4

여기에이 코드가 있는데 임의의 점을 중심으로 모든 값을 확인하고 == 1인지 확인하고 싶지만 배열 테두리에있는 값을 확인하면 "ArrayIndexOutOfBoundsException"오류가 발생합니다. 나는 많은 것들을 시도했지만 그것을 작동시키지 못합니다. 어떤 도움을 주시면 감사하겠습니다! i 0이면 i - 1이므로 -1 배열에 대한 유효하지 않은 인덱스오류없이 범위를 체크 아웃하는 방법은 무엇입니까?

 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

물론 예외가있을 것이다.

정확하게하려면 인덱스가 배열의 범위를 벗어나지 않았는지 먼저 확인해야합니다. 다음으로 인덱스의 항목이 1과 같은지 확인하십시오.

if 문을 많이 쓰는 것은 짜증나는가요? 따라서 배열을 검사하고 조작해야하는 인덱스 배열을 만들어야합니다.

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; 
     } 
    } 
}