0

我如何删除所有等于我输入的值的元素我试过这个代码

public void deletAll(int v)
{
    if (i = 0; i < count; i++)
    {
        if (a[i] == v)
            for (k = i; k < count; k++)
                a[k] = a[k + 1];
    }
}  
4

4 回答 4

11

您不能从数组中删除元素。

您可以将该值设置为 0 或其他任何值......您甚至可以移动后面的元素 - 但您不能让数组的长度比原来的短。

因此,要稍微更改现有代码以移动剩余元素并将最后一个元素设置为 0,您只需要:

public void deleteAll(int v) {
    if (i = 0; i < a.length; i++) {
        if (a[i] == v) {
            // Shift all elements. Note the end condition of the loop...
            for (k = i; k < a.length - 1; k++) {
                a[k] = a[k + 1];
            }
            // Set the last element to 0
            a[a.length - 1] = 0;
        }
    }
}

这删除了 ​​的使用count,因为数组已经有一个长度。如果count是“数组中有意义元素的数量”,那么您可能希望将代码更改为:

public void deleteAll(int v) {
    if (i = 0; i < count; i++) {
        if (a[i] == v) {
            // Shift all elements. Note the end condition of the loop...
            for (k = i; k < count; k++) {
                a[k] = a[k + 1];
            }
            // Remember that we've got fewer elements now
            count--;
            // Set the last element to 0 (the one we've just copied into
            // the final "useful" position)
            a[count] = 0;
        }
    }
}

如果您发现自己要这样做,您应该使用 aList代替,例如ArrayList.

于 2013-03-13T07:59:45.263 回答
1

我想那是一个 for 循环,它应该是这样的:

for (int i = 0; i < count; i++)
    if (a[i] == v)
        a[i] = 0; // or whatever you do with a matching value

如果您要从数组中删除项目,我认为您应该这样做:

List<T> b = new List<T>();
for(int v : a)
    if (v != a)
        b.Add(v);

然后您可以将该列表转换为数组并将其更改a[]为。因为您不知道新数组的大小,所以您需要使用这种方法。

于 2013-03-13T07:58:14.440 回答
0

由于您不能从数组中删除项目并使数组的大小比声明的短,因此您可以将该索引值分配为零。尝试这个 :

public void deleteAll(int v){        
    if (a[i] == v) {
        a[i] = 0;
    }
}
于 2013-03-13T07:59:48.310 回答
0

如果您遇到数组并需要缩小它们,则必须创建一个新数组。

public void deleteAll(int v) {
  for (int i = 0, j = 0; i < a.length; i++)
    if (a[i] != v) a[j++] = a[i];
  a = Arrays.copyOf(a, j);
}
于 2013-03-13T08:29:38.390 回答