在我的程序中,我首先搜索一个值,如果它存在,则给出数组位置,如果不是-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)
答案 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;
}
}