2015-10-19 68 views
0

我想创建一个方法,通过'数据'数组搜索字符串'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 你好 酒井法子 好友 玛丽 彼得 你好

谁能告诉我怎样才能修复代码,以便阵列中的其余项目都将下移?我认为问题出在我的删除方法中。

+0

为什么你的预期输出包含'etl'和'hello'而不是'null'? – sam

+0

它应该打印Noriko Buddy玛丽彼得让第一个迭代器问好。然后,在第二个迭代器中,我希望它打印Noriko Buddy Mary Peter hello,因为它从阵列中删除了elt,并将hello向下移位。但是,这不是那样做的。 –

回答

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

`

+0

它的工作,谢谢!你介意解释为什么这种方式有效,但我没有? –

+1

你的代码的问题是行数据[i] = data [i-1];它将用下一个位置值替换null,因为您已经将索引增加到下一个位置。所以它会像data [5] = data [4](null) –