Я пытаюсь создать метод, который ищет в массиве данных, чтобы найти строку «elt». Если он существует, он перемещает все элементы после «elt» в одну позицию влево (чтобы покрыть ячейку, где существовал «elt»).Как перемещать элементы в массиве?
Я могу найти все экземпляры «elt» и установить их в нуль, но у меня возникают проблемы с перемещением всех элементов, прошедших «elt», на одно место в массиве. Код ниже - это то, что у меня есть до сих пор.
public class Bag<T> implements Iterable<T> {
private final int MAXLEN = 3;
private int size;
private T[] data; // array
public T remove(T elt) {
for (int i=0; i<data.length; i++) {
if ("elt".equals(data[i])) {
data[i] = null;
for (i++; i < data.length; i++) {
data[i] = data[i-1];
}
}
}
public static void main(String[] args) {
Bag<String> sbag = new Bag<String>();
sbag.add("Noriko");
sbag.add("Buddy");
sbag.add("Mary");
sbag.add("Peter");
sbag.add("elt");
sbag.add("hello");
Iterator<String> it = sbag.iterator();
while (it.hasNext()) {
String val = it.next();
System.out.println(val);
}
sbag.remove("elt");
Iterator<String> it2 = sbag.iterator();
while (it2.hasNext()) {
String val = it2.next();
System.out.println(val);
}
}
Когда я запускаю этот код, я получаю:
Норико Buddy Мэри Питер еи привет Норико Buddy Mary Peter нулевой
Однако, я ожидал
Норико Buddy Мэри Питер еи привет Норико Buddy Мэри Питер привет
Может кто-нибудь сказать мне, как я могу исправить код так, чтобы остальная часть элементов массива сдвигаются вниз? Я думаю, проблема в моем методе удаления.
Почему ваш ожидаемый результат содержит' 'etl' и hello' вместо «null»? – sam
Он должен напечатать норико Бадди Мэри Питер, поздоровавшись с первым итератором. Затем, со вторым итератором, я хочу, чтобы он напечатал «Норико Бадди Мэри Питер», потому что он удаляет elt из массива и смещает его на место. Однако это не так. –