Этот код должен найти максимальное число массива с целыми числами Проблема в том, что я получаю сообщение об ошибке Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
.Как я могу решить эту рекурсию
public long DivideAndConquer(int lo,int hi)
{
int mid=((lo+hi)-1)/2;
if(myarray[mid]>=myarray[mid-1]&&myarray[mid]>= myarray[mid+1])
return myarray[mid];
else if (myarray[mid-1]>= myarray[mid])
return DivideAndConquer(lo,mid-1);
else if (myarray[mid]<=myarray[mid+1])
return DivideAndConquer(mid+1,hi);
return 99;
}
пик число является числом, которое больше, чем их соседи, и если я в конце массива или в самом начале, то я должен смотреть только для элемента отрывков.
Я думаю, что получаю эту ошибку, потому что если мой элемент в последнем положении больше, чем предварительный просмотр, то это пик. Например, моя последняя позиция - 9, тогда у меня есть myarray[9] > myarray[8]
, тогда это пик, но в первом случае if он выглядит также для myarray[9+1]
, которого у меня нет, поэтому он дает мне эту ошибку.
Я не могу удалить &&
для первого оператора и добавить «или» (||
), потому что тогда я получаю неправильный ответ. Любые идеи, пожалуйста?
Вы уверены, что поняли, что сравнение происходит там? – Stefan
Вы не передаете элемент, который хотите найти. Что ты пытаешься сделать? – Maroun
Я думаю, что было бы проще, если бы вы указали, какой ввод вы используете, когда получаете ошибку, например: 'int [] myarray = new int [] {1, 2, 3, 4, 5}; было бы хорошо, если бы вы точно объяснили, что означает 'hi' и' lo'. Я думал, что 'lo' первоначально будет индексом первого элемента в массиве, а' hi' будет индексом последнего элемента в массиве. Но тогда расчет для 'mid' не имеет смысла. Например. если есть 5 элементов: '((lo + hi) -1)/2 = ((0 + 4) -1)/2 = 3/2 = 1' Но индекс среднего элемента равен 2. – Alderath