2016-10-10 3 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Мне нужно найти значения, которые являются локальными минимумами в этом массиве, но я получаю исключение arrayindexoutofbounds. Как я могу это исправить?

+0

итерацию к 'a.length - 1'. Прямо сейчас, вы пытаетесь сделать 'A [i + 1]', который будет за пределами границ, потому что вы в настоящее время итерации на 'A.length'. – Li357

+0

Я все еще получаю то же сообщение об ошибке, хотя, потому что он будет за пределами A [i - 1] –

+0

Тогда начните с 1. – Li357

ответ

1

Вы должны использовать модуль при попытке получить доступ к itens так, чтобы он никогда не выходит за пределы границ.

нравится:

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

Таким образом, результат для первой итерации для prevValue будет последний номер, а и результат для последней итерации для nextValue будет первым номером.

1

Если вы пишете

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

в цикл, начиная от i = 0 и заканчивая i = array.length - 1, имейте в виду, что на первом и последнем повороте, вы будете пытаться получить значения из array[-1] и array[array.length] элементов , которых нет. Попробуйте начать цикл из 1 в array.length - 2:

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

 Смежные вопросы

  • Нет связанных вопросов^_^