2014-01-29 199 views
1

我工作的一些数据结构 - 搜索元素,我试图删除元素之后 - 但抛出删除[]数组元素

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); 

我没有包括所有的c为简明起见,这是代码断行

setArray[k]=setArray[k+1]; 

请让我知道是否需要其余的代码。感谢你的帮助。

+3

调试你的代码更容易和更美好的生活。 – Maroun

+0

我们无法进入您的机器并为您调试代码。而例外是自我解释。您尝试访问的索引不存在。 setArray [k] = setArray [k + 1];在此行之前的 –

+1

; YOu需要检查k = Array.length-1 –

回答

2

这里的问题是,你的循环结束条件

k<setArray.length 

,但那么你使用

setArray[k+1] 

更改条件

k < setArray.length - 1 
+0

好吧,现在我可以看到明显的错误,我总是将'.length'方法与索引混淆 - 它现在不会引发异常。 –

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++)

+0

感谢您的详细分析 - 'if(setArray [j] == setArray.length) System.out。print(“no item found”);'这一行检查是否找不到任何项目 - –

1

问题是这样的片段:

for(k=j;k<setArray.length;k++) 
      setArray[k]=setArray[k+1]; 

k == setArray.length - 1setArray[k+1]超越setArray边界

+0

我的回答有错误。它应该是:“当k == setArray.length - 1” – luboskrnac

+0

@sitko - 此行'setArray [k] = setArray [k + 1];'将高级元素向下移动一步 - –

0

我dont't知道你的代码 但行

setArray[k]=setArray[k+1]; 

它的出界阵列

+0

指出错误上面 - 它是'k

1

如果u要删除的元素在数组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 
+0

谢谢你,我会试试这个代码 - :) –