2016-10-10 10 views
1
public class LocalMinimum { 
    public static void main(String[] args) { 
     int[] A = {8, 5, 7, 2, 3, 0, 1, 9}; 
     for (int i = 0; i < A.length; ++i) { 
      int prevValue = A[i - 1]; 
      int nextValue = A[i + 1]; 
      if ((A[i] < prevValue) && (A[i] < nextValue)) { 
       System.out.println(A[i] + " is a minimum value."); 
      } 
      else { 
       System.out.println(A[i] + " is not a minimum value."); 
      } 
     } 
    } 
} 

오류 : 스레드 "주요"java.lang.ArrayIndexOutOfBoundsException의 예외 : -1 결코 범위를 벗어 없도록 A의 itens에 액세스하려고 할 때 모듈을 사용한다이 배열에서 로컬 최소값을 찾아야하지만 arrayindexoutofbounds 예외가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

'A.length - 1'로 반복하십시오. 지금 현재'A.length'를 반복하기 때문에 범위를 벗어나는'A [i + 1]'을하려고합니다. – Li357

+0

A [i - 1]에서 범위를 벗어날 수 있기 때문에 여전히 같은 오류 메시지가 표시됩니다. –

+0

1에서 시작하십시오. – Li357

답변

1

.

좋아 :

int prevValue = A[((i - 1) % A.length)]; 
int nextValue = A[((i + 1) % A.length)]; 

이 방법은,에 prevValue에 대한 첫 번째 반복에 대한 결과는 대신에 마지막 숫자와 첫 번째 숫자가 될 것이다 nextValue의 마지막 반복에 대한 결과가 될 것입니다.

1

당신이 i = 0에서 시작 i = array.length - 1로 끝나는, for 루프에서

int prevValue = A[i - 1]; 
int nextValue = A[i + 1]; 

을 작성하는 경우, 첫 번째와 마지막 차례에, 당신은 array[-1]array[array.length] 요소에서 값을 얻으려고 노력되므로주의 , 존재하지 않습니다. 루프를 시작하여 1에서 array.length - 2 :

for (int i = 1; i < array.length - 2; i++) { 
    // do your job 
}