我的工作是创建一个程序,用户将输入一个数字,它将搜索输入的数字 在我的阵列存储中;如果它在那里,它会说"发现"并显示数组中的所有元素并删除Found值;
它是这样的:
我已经完成了我的代码但是存在问题; 如果发现它没有显示数组的所有元素而不删除它。 发生错误
顺便说一句,这是我的代码:
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] + " ");
}
}
那么你能帮助我找出我的代码中有什么问题吗?
答案 0 :(得分:2)
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.