我想创建一个方法,通过'数据'数组搜索字符串'elt'。如果存在,它会将'elt'一个位置后面的所有元素向左移(覆盖'elt'存在的单元格)。如何移动数组中的元素?
我能够找到“elt”的所有实例并将它们设置为null,但我在将所有元素移过数组中的一个空间时遇到问题。下面的代码是我到目前为止。
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);
}
}
当我运行代码,我得到:
酒井法子 好友 玛丽 彼得 ELT 你好 酒井法子 好友 玛丽 彼得 空
不过,我期待
酒井法子 好友 玛丽 彼得 ELT 你好 酒井法子 好友 玛丽 彼得 你好
谁能告诉我怎样才能修复代码,以便阵列中的其余项目都将下移?我认为问题出在我的删除方法中。
为什么你的预期输出包含'etl'和'hello'而不是'null'? – sam
它应该打印Noriko Buddy玛丽彼得让第一个迭代器问好。然后,在第二个迭代器中,我希望它打印Noriko Buddy Mary Peter hello,因为它从阵列中删除了elt,并将hello向下移位。但是,这不是那样做的。 –