我正在研究一些数据结构 - 在搜索元素之后,我试图删除该元素 - 但抛出
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at SearchArray.deleteElements(SearchArray.java:68)
at SearchArrayDemo.main(SearchArrayDemo.java:25)
这是我的方法
void deleteElements(int value)
{
int j,k;
for (j=0;j<setArray.length;j++)
if ( value == setArray[j])
break;
if
(setArray[j] == setArray.length)
System.out.print("no item found");
else
{
for( k=j;k<setArray.length;k++)
`setArray[k]=setArray[k+1];`
k=setArray.length-1;
setArray[j]=0;
System.out.println("item deleted");
}`
和用于调用函数deleteElements
sa.deleteElements(5);
我没有包含所有简洁代码,这是代码中断的行
setArray[k]=setArray[k+1];
如果需要剩余代码,请告诉我。谢谢大家的帮助。
答案 0 :(得分:2)
这里的问题是你的循环结束条件是
k<setArray.length
,但是你使用
setArray[k+1]
将条件更改为
k < setArray.length - 1
答案 1 :(得分:1)
for( k=j;k<setArray.length;k++)
setArray[k]=setArray[k+1]; \\ K+1 (invalid index when k = setArray.length-1
在您的代码中,最后一个元素将失败。因此你得到了例外
在数组中,最后一个索引将是Array.length-1
。对于最后一个元素,代码失败的原因是k=Array.length-1
(最后一个索引)和k+1 = Array.length
(不存在)。因此它抛出了界限异常。
你的第一个for循环有一些死代码:
if(setArray[j] == setArray.length)
System.out.print("no item found");
您的循环for (j=0;j<setArray.length;j++)
答案 2 :(得分:1)
问题在于这个片段:
for( k=j;k<setArray.length;k++)
setArray[k]=setArray[k+1];
当k == setArray.length - 1
时,setArray[k+1]
超出了setArray边界
答案 3 :(得分:1)
如果你想删除数组4中的元素
class arrayserch{
public int value(){
int[] arr={1,2,3,4,5,6;
int i=0;
for(int a:arr){
if(a==4){
return i;
}
else
i++;
}
return=-1;
}
}
class example{
public static void main(string arags[]){
arrsearch as=new arrrsearch();
int i=as.value();
if(i!=-1){
arr.length--;
for(int j=i;j<arr.length;j++)
{
arr[j]=arr[i++];
}
}
}
this may solve ur problem
答案 4 :(得分:0)
我不知道你的代码 但行
setArray[k]=setArray[k+1];
它是边界数组