如何在数组中移位元素?

时间:2015-10-19 23:01:59

标签: java arrays

我正在尝试创建一种搜索'数据的方法。数组找到字符串' 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 你好 纪子 伙伴 玛丽 彼得 喂

有人能告诉我如何修复代码,以便数组中的其他项目向下移动吗?我认为问题出在我的删除方法中。

1 个答案:

答案 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;
        }
    }

`