我如何删除所有等于我输入的值的元素我试过这个代码
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];
}
}
您不能从数组中删除元素。
您可以将该值设置为 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
.
我想那是一个 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[]
为。因为您不知道新数组的大小,所以您需要使用这种方法。
由于您不能从数组中删除项目并使数组的大小比声明的短,因此您可以将该索引值分配为零。尝试这个 :
public void deleteAll(int v){
if (a[i] == v) {
a[i] = 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);
}