在数组中搜索并删除错误

时间:2014-04-18 05:45:42

标签: java arrays class search

在我的程序中,我首先搜索一个值,如果它存在,则给出数组位置,如果不是-1,但是当我尝试在程序中返回错误消息时,无法找到输入的值没删除我收到一个实际的错误。这可能听起来令人困惑,如果你不通过查看我的代码看到我说的话,我可以尝试解释更多。 有人可以帮忙吗?

private int search(int s){
    int position = 0;
    while(nums[position] != s){
        if(position < size)
            position++;
        else
            position = -1;
    }
    return position;
}
public void delete(int d){
    int value = search(d);
    if(search(d) == -1){
        System.out.println("The value " + d + " was not found and cannot be deleted");
    }
    else

    for(int n = size; n > value; n--)
        nums[value] = nums[size];
}

我收到错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Numbers.search(Numbers.java:44)
at Numbers.delete(Numbers.java:53)
at Assignment7.main(Assignment7.java:31)

4 个答案:

答案 0 :(得分:0)

我不懂Java,但我知道C#。我认为搜索方法会搜索现有条目。

不要使用if条件。

在搜索代码和catch块中捕获异常,执行以下操作:

System.out.println("The value " + d + " was not found and cannot be deleted");

答案 1 :(得分:0)

确保变量size等于数组长度nums.length-1;

int size=nums.length-1;

答案 2 :(得分:0)

您的信息不足以完全跟踪代码,但是这一行:

for(int n = size; n > value; n--)
    nums[value] = nums[size];

似乎很可疑。

根据OP的评论进行编辑:

while(nums[position] != s){
    if(position < size)
        position++;

好的,只需将位置增加到大小,即超出范围。(似乎size等于nums.lenght

BTW我建议您像这样使用ArrayList,因为它为您提供了很多功能:

ArrayList<Integer> nums = new ArrayList<Integer>();
//....
return nums.indexOf(s); //s is an Integer

答案 3 :(得分:0)

EDIT3:

在这里,我添加了比上一次编辑更好的代码。

这已删除了数组元素。 通常情况下,我不会为你工作,但这是很难在没有一点技术知识的情况下解决的问题,至少在我看来,除非你想继续编码和修复。

您的搜索有效,但删除实施并没有。如前所述,你的for循环不对。它不断重复相同的指令(将搜索到的值放在数组的末尾,永远删除之前的值),最后不要删除任何重要的内容,甚至丢失信息,如果你想保留它的话。

以下代码可帮助您确定如何完成程序的预期功能。

public class SearchTest {

static int nums[] = new int[] { 1, 2, 3, 4, 5 };

public static void main(String[] args) {

    delete(2);
    //deletes the number 2, if found

    for (int i = 0; i < nums.length; i++) {

        System.out.println(nums[i]);

    }

}

public static void delete(int d) {
    int value = search(d);
    if (value == -1) {
        System.out.println("The value " + d
                + " was not found and cannot be deleted");
    } else
        //removes the element, since it was found
        nums = removeElement(nums, value);
}
/**
*http://stackoverflow.com/questions/4870188/delete-item-from-array-and-shrink-array
* This is the remove method from this post, look at this link for more
**/

public static int[] removeElement(int[] original, int index) {
    int[] n = new int[original.length - 1];
    System.arraycopy(original, 0, n, 0, index);
    System.arraycopy(original, index + 1, n, index, original.length - index
            - 1);
    return n;
}

private static int search(int s) {
    int position = 0;
    while (nums[position] != s) {
// changed to nums.length
        if (position < nums.length)
            position++;
        else
            position = -1;
    }
    return position;
}
}