0

目前正在开发一个执行一系列功能的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

4 回答 4

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?删除应该快得多。

于 2013-02-18T23:47:10.257 回答
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;

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

于 2013-02-19T02:38:26.410 回答
0

因此,您正在删除数组索引 1 -3 --

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

相反,您希望保留要删除的元素数量( end - begin + 1 )

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

类似的东西。

于 2013-02-18T23:31:58.433 回答
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();  
        }  
    }
}
于 2013-02-18T23:41:40.607 回答