deleteRange函数只删除第一个和最后一个

时间:2013-02-18 23:22:57

标签: java arrays range

目前正在开发一个执行一系列功能的java程序,其中一个功能是删除一系列按字母顺序排列的单词。我以动物为例。

这是执行deleteRange函数之前的显示列表:

cat
chinchilla
horse
mouse
rat

我要求程序将栗鼠删除为鼠标,但它不包括马。

public boolean deleteRange(String start, String stop){
    boolean result = false;
    int begin = Find(start);
    int end = Find(stop);
    while(begin<end){
        Delete(storage[begin]);
        begin++;
        result = true;
    }
    return result;
}

我的删除功能:

public boolean Delete(String value){
    boolean result = false;
    int location;
    location = Find(value);
    if (location >= 0) {
        moveItemsUp(location);
        numUsed--;
        result = true;
    }
    return result;
}

我的查找功能:

public int Find(String value) {
    int result = -1;
    int index = 0;
    boolean found = false;
    while ((index < numUsed) && (!found)) {
        found = (value.equals(storage[index]));
        if (!found)
            index++;
    }
    if (found)
        result = index;
    return result;
}

我的moveitemsup功能:

private void moveItemsUp(int start){
    int index;
    for (index = start; index < numUsed-1; index++){
        storage[index] = storage[index+1];
    }
}

4 个答案:

答案 0 :(得分:0)

所以,你要删除数组索引1 -3 -

删除数组索引1后,您的前索引3现在变为2并且您正在递增“开始”..所以现在删除索引2 ..在这种情况下是鼠标..所以马被跳过。

相反,您希望保留要删除的元素数(结束 - 开始+ 1)

int count = end - begin + 1;
while ( count > 0 ) {
Delete(storage[begin]);
}

沿着这些方向发展。

答案 1 :(得分:0)

如果您的列表位于ArrayList中,为什么不尝试这样的事情(此框中没有Java内容,因此尚未经过测试)。

public boolean deleteRange( String start, String stop ) {
    for(Iterator<String> iter = storage.iterator();iter.hasNext();) {  
        String element = iter.next();  
        if(element.compareTo(start) >= 0 && element.compareTo(stop) <= 0 ) {  
            iter.remove();  
        }  
    }
}

答案 2 :(得分:0)

我能看到的问题是:

问题1

在每次删除后,你会同时增加begin索引和“缩小(不会真正收缩)”数组。

例如

[a,b,c,d,e,f],您要删除b-e索引1-4

首先删除后删除b (index 1)然后删除moveItemsUp。所以数组是: [a,c,d,e,f,f],那么begin++开头是2,指向d,跳过c

问题2

如果您修复了问题1,还有另外一件事需要考虑,删除后,如果符合您的要求,数组将为[a,f,f,f,f,f]

不过,为什么不考虑使用LinkedList?删除速度应该快得多。

答案 3 :(得分:0)

    int begin = Find(start);
    int end = Find(stop);
    int count = end - begin;
    for (int i=0; i <= count; i++){
        Delete(storage[begin]);
        result = true;

将一些代码改为此,使其工作=)