删除array []元素

时间:2014-01-29 07:04:57

标签: java arrays

我正在研究一些数据结构 - 在搜索元素之后,我试图删除该元素 - 但抛出

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

如果需要剩余代码,请告诉我。谢谢大家的帮助。

5 个答案:

答案 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];

它是边界数组