Наивное решение, управление массивом может быть сделано лучше, однако это работает.
public static void replaceWithNeighbours(int[] array, int[] out) throws Exception
{
// checkif lengths match
if (array.length != out.length)
{
throw new Exception("Lengths don't match");
}
// replace values in output array
out[0] = array[0];
out[out.length - 1] = array[array.length - 1];
for (int i = 1; i < array.length - 1; i++) {
int larger = array[i - 1];
if (larger < array[i + 1]) {
larger = array[i + 1];
}
out[i] = larger;
}
}
Ваша основная проблема заключается в том, что вы перебираете массив и обновляете его, однако не учитываете предыдущие итерации.Это означает, что вы можете посмотреть на соседа, который уже содержит обновленное значение, и использовать это значение, потому что старый перезаписан.
Поскольку у вас также есть проблема с последним обновляемым элементом:
Просмотрите свой код, используя отладчик или простые операторы печати, и выясните, где именно ваш индекс 9 действительно доступен.Это не в replaceWithNeighbours
, поэтому должно быть где-то еще.Однако вы можете решить эту проблему самостоятельно, просто посмотрите, какие индексы используются, а когда увидите цифру 9, посмотрите, что и где введено.