我正在尝试创建一种搜索'数据的方法。数组找到字符串' elt'。如果它存在,它会在“elt”之后移动所有元素。左边一个位置(覆盖存在的单元格)。
我能够找到" elt"的所有实例。并将它们设置为null,但我在将所有元素转移过去时遇到了问题" 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);
}
}
当我运行该代码时,我得到:
典子 伙伴 玛丽 彼得 ELT 你好 纪子 伙伴 玛丽 彼得 空
然而,我期待
典子 伙伴 玛丽 彼得 ELT 你好 纪子 伙伴 玛丽 彼得 喂
有人能告诉我如何修复代码,以便数组中的其他项目向下移动吗?我认为问题出在我的删除方法中。
答案 0 :(得分:1)
如果我理解你正在努力实现的目标,那么你就会改变你想要的错误方式:
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-1] = data[i];
}
break;
}
}
`