目前正在开发一个执行一系列功能的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];
}
}
答案 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;
将一些代码改为此,使其工作=)