我在从数组中删除元素时遇到问题。它给出了outofBounds
和java.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");
}
}
}
答案 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);
}
}