如果已找到数组,则无法删除该数组(数组搜索排序)

时间:2014-12-11 08:30:15

标签: java arrays sorting search

我的工作是创建一个程序,用户将输入一个数字,它将搜索输入的数字 在我的阵列存储中;如果它在那里,它会说"发现"并显示数组中的所有元素并删除Found值;

它是这样的: enter image description here

我已经完成了我的代码但是存在问题; 如果发现它没有显示数组的所有元素而不删除它。 发生错误

enter image description here

顺便说一句,这是我的代码:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int[] ArrayApp = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
            16, 17, 18, 19, 20 };

    System.out.println("ArrayList:");
    for (int x = 0; x < ArrayApp.length; x++) {
        System.out.print(ArrayApp[x] + " ");
    }
    System.out.println();
    System.out.print("Enter a number: ");
    int num = input.nextInt();
    int x;
    for (x = 0; x < ArrayApp.length; x++) {
        if (ArrayApp[x] == num) {
            break;
        }
    }
    if (x == ArrayApp.length) {
        System.out.println("Cant find: " + num);
    } else {
        System.out.println("Found");
    }

    for (int k = x; k < ArrayApp.length; k++) {
        ArrayApp[k] = ArrayApp[k + 1];

    }

    for (x = 0; x < ArrayApp.length; x++) {
        System.out.print(ArrayApp[x] + " ");
    }

}

那么你能帮助我找出我的代码中有什么问题吗?

3 个答案:

答案 0 :(得分:2)

当k = ArrayApp.lenngth-1时,

ArrayApp[k] = ArrayApp[k + 1];将抛出ArrayIndexOutOfBounds异常,因为k + 1将超出范围。

您应该更改范围:

for (int k = x; k < ArrayApp.length - 1; k++) {
    ArrayApp[k] = ArrayApp[k + 1];
}

在打印输出数组时,如果删除了一个元素,则不想打印最后一个元素,因为它会被打印两次(因为数组的长度不会改变)。

int length = ArrayApp.length;
if (x < ArrayApp.length) // adjust the number of elements to be printed after
                         // one element was removed
    length--;
for (x = 0; x < length; x++) {
    System.out.print(ArrayApp[x] + " ");
}

答案 1 :(得分:0)

我认为以下几行是问题。

ArrayApp[k] = ArrayApp[k + 1];

您正在尝试访问k + 1,如果k = arraylength - 1,访问将导致 ArrayIndexOutOfBoundException ,因为您尝试访问索引可用的元素(即数组索引是0到长度-1)

答案 2 :(得分:0)

更改for循环
for (int k = x; k < ArrayApp.length; k++) {
    ArrayApp[k] = ArrayApp[k + 1];
}

for (int k = x; k < ArrayApp.length - 1; k++) {
    ArrayApp[k] = ArrayApp[k + 1];
}
ArrayApp[k] = -1;//reset last element to -1 as you removed the xth element you found.