从数组中删除元素并将所有内容都移除

时间:2017-10-04 03:03:32

标签: java

我在从数组中删除元素时遇到问题。它给出了outofBoundsjava.lang.exception "The string isn't in the array"之类的错误,但确实如此。

public void setDeleteItem(String deleteItem) throws Exception{
    for(int i = 0; i < arraySize; i++) {        
        if(deleteItem.equals(array[i])) {   
            array[i] = "";
            if(i < arraySize - 1) {
                array[i] = array[i + 1];
                arraySize--;
            }
        } else if(!deleteItem.equals(array[i])) {
            throw new Exception("This string isn't in the array");
        }
    }
}

3 个答案:

答案 0 :(得分:0)

你为每次不匹配都抛出异常。首先遍历数组中的所有元素,然后决定异常。

public void setItem(String deleteItem) throws{
boolean match = false;
for(int i = 0; i < arraySize; i++) {        
    if(delete.equals(array[i])) {
        match = true;   
        array[i] = "";
        if(i < arraySize - 1) {
            array[i + 1] = array[i] ;
            arraySize--;
        }
    } 
}
if(!match){
    throw new Exception("This str in the array");
}

答案 1 :(得分:0)

Java数组具有固定的长度,因此将长度存储为单独的变量是没有意义的(您不需要它)。首先,在数组中搜索元素;如果没有发现抛出异常。否则,构建一个新数组 - 复制值,并将数组分配给本地字段。像,

public void setDeleteItem(String deleteItem) throws Exception {
    int p = -1;
    for (int i = 0; i < array.length; i++) {
        if (deleteItem.equals(array[i])) {
            p = i;
            break;
        }
    }
    if (p == -1) {
        throw new Exception("This string isn't in the array");
    }
    String[] newArray = new String[array.length - 1];
    System.arraycopy(array, 0, newArray, 0, p);
    System.arraycopy(array, p + 1, newArray, p, newArray.length - p);
    array = newArray;
}

使用List(特别是ArrayList) - 提供此功能。

答案 2 :(得分:0)

你在每个匹配上抛出异常而不是你应该检查整个数组然后抛出错误。 您可以将以下解决方案用于相同目的: 包实现;

import java.util.Arrays;

public class DeleteFromArray {

public static void delete(String[] array, String deleteItem) throws Exception {
    boolean flag = true;
    int i = 0;
    while (flag && (i < array.length)) {
        if (deleteItem.equals(array[i])) {
            flag = false;
        } else {
            i++;
        }
    }

    if (!flag) {
        // once item found shift other items
        while (i < array.length - 1) {
            array[i] = array[i + 1];
            i++;
        }
        // copy array to new array
        String[] array1 = new String[array.length - 1];
        System.arraycopy(array, 0, array1, 0, array.length - 1);
        System.out.println(Arrays.toString(array1));
    } else {
        throw new Exception("This string isn't in the array");
    }

}

public static void main(String[] args) throws Exception {
    String[] array = new String[] { "one", "two", "three", "four" };
    String deleteItem = "five";
    delete(array, deleteItem);
}

}