2014-01-29 240 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

謝謝你,我會試試這個代碼 - :) –