2

私は次の質問に取り組んでいます:

パラメータとして整数値を取り、指定された値のすべての出現をリストから削除する removeAll メソッドを記述します。

私のコードは、配列内のすべての要素をチェックしません。forループの「サイズ」を配列内の整数の数に変更すると、正常に動作します。それらすべてをチェックします。

public class ArrayIntList { 
    private int[] elementData;
    private int size;
}


public void remove(int index) {

    for(int i = index; i < size-1; i++) {
        elementData[i] = elementData[i+1];
    }
    size--;
}

public void removeAll(int num) {

    for (int j = 0; j < size; j++) {// this loop doesn't check all the elements

        if (elementData[j] == num) {
            remove(j);
        } 

    }

}
4

1 に答える 1

1

要素を削除する場合は、デクリメントする必要がありますj。そうしないと、要素をスキップします。

remove(j);
j--;

または、最後から最初まで反復する場合、それらの要素は既に処理されているため、カウンターを変更する必要はありません。

 for (int j = size - 1; j >= 0; j--) {
    if (elementData[j] == num) {
          remove(j);
     } 
 }
于 2013-02-25T02:28:01.037 に答える