2014-10-27 2 views
1

Я пишу алгоритм, который сравнивает число п с элементами п + 1 и п-1.Java сделка с индексом массива за пределы

Это означает, что первая и последняя проверка завершились неудачно, потому что array.length + 1 будет за пределами границ и поэтому будет массив [0-1]. Я пытаюсь найти способ остановить программу от выброса исключений из массива за пределы исключения, но я не уверен, как это сделать. Мой первоначальный план был проверить, что массив [0-1] и длина + 1 всегда являются нуль, как так:

numbers[x-1] == null 

Но это не работает из-за несоответствия с ИНТ в нуль. Любые идеи о том, как исправить это, будут очень оценены.

+1

начать свой цикл от 1 до N-1 и сравнить 0-й элемент с элементом с индексом 1, п-й элемент с (n- 1) th one ... – mounaim

+0

Предполагая, что вы делаете цикл 'for' для этого, как насчет' for (start = i + 1, end = n-2, inC++) '? Таким образом, вы всегда находитесь в диапазоне. Также вы можете использовать функцию длины, чтобы определить, достиг ли она предела и сломать ваш цикл. – ha9u63ar

ответ

4

итерация начинается с index 1 и заканчивается с индексом array.length - 1.

for(int i=1;i<array.length-1;i++){ 
    int prev = array[i-1]; 
    int current = array[i]; 
    int next = array[i+1]; 
} 
0

Вы должны использовать «если» заявление, чтобы проверить, что ваш индекс находится в пределах:

if (x >= 0 && x < numbers.length) 
    numbers[x] = someNumber 
0

Помимо проверки длины другие ответы предполагают, вы также можете создать массив один элемент больше, так что последний элемент п + 1 по-прежнему действует положение массива, но помечает конец массива. Таким образом, вы можете забыть все проверки длины, которые улучшат скорость вашего алгоритма - если это важно. В противном случае я бы выполнил проверку длины.

1

Я бы лишь проверяет краям массива:

int prev = -1; 
int next = -1; 
for (int i=0; i<array.length; i++) { 
    if (i>0) 
     prev = array[i-1]; 
    if (i < array.length - 1) 
     next = array[i+1]; 
    else 
     next = -1; 
    // now do whatever you wish to do with array[i], prev and next 
} 

В этом случае я выбрал -1, чтобы представить «пустое» значение. Вы можете использовать что-то еще, в зависимости от диапазона значений, которые могут быть в вашем массиве.

0

Что-то вы могли бы использовать для сравнения массивов с последним и следующим элементом:

for(int index=1;index<array.length-1;index++){ 
    if (number > numbers[index - 1] && number < numbers[index + 1]) { 
     System.out.println("Number is between " + (index - 1) + " and " + (index + 1)); 
    } 
} 
Смежные вопросы