Member 14409586 Ответов: 2

Как я могу завершить метод remove в 5.5.4 улучшение расширения массива из codehs


При тестировании метода remove мой результат говорит мне, что у меня есть дополнительный элемент в исходном массиве. Вот что у меня есть:

public int remove(индекс int)
{
for (int i = index; i < numElements - 1; i++)
{
System.out.println("удаление" + i);
arr[i] = arr[i + 1];
}
return arr[индекс];
}

Что я уже пробовал:

Я пробовал разные вещи, такие как установка "i" меньше, чем numElements плюс 1, а не минус, но я не думаю, что это то, где происходит мой probelm. Я немного заржавел, когда дело доходит до Java, но я делаю все возможное!

2 Ответов

Рейтинг:
2

OriginalGriff

Вы ничего не "удаляете": вы копируете элементы в более ранние местоположения, но это не уменьшает количество элементов в массиве.
Например, если arr имеет 5 элементов:

Index:  0  1  2  3  4
Value:  7  8  9  0  1
Тогда это вы звоните remove с индексом 2 затем после метода arr будет изменено:
Index:  0  1  2  3  4
Value:  7  8  0  1  1
Вероятно, именно отсюда и происходит ваш "дополнительный элемент".


Рейтинг:
2

Richard MacCutchan

Рассмотрим ситуацию, когда в вашем массиве есть три элемента, а индекс равен 1. Итак i идет от 1 до 1 (то есть меньше 2 (3-1)).

for (i = 1; i < 2; i++)
{
    arr[1] = arr[2];
}
// but all the remaining elements (including arr[2]) still exist

Ваш код на самом деле ничего не удаляет, он просто перемещает все элементы после того, на который указывает index И последний в цикле дублируется.