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

これを実行したいList場合は、代わりに、たとえばを使用する必要があります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 に答える