3

私は自分のaddメソッドが正しいことを知っています:

public void add(Object object) {
    if (!contains(object) && size !=maxObjects) {
        set[size] = object; size++;
    }
    else 
        System.out.println("Already exists.");
}

私は次のようなプリントアウトを取得するため:

Set [maxObjects=8, set=[a, 7, null, null, null, null, null, null], count=2]  
true  (I ask if it contains a value)  
false  "                            "  
Set [maxObjects=8, set=[a, 7, b, Valencia, 24, s, Victoria, null], count=7]  
Set [maxObjects=8, set=[a, 7, b, Valencia, 24, s, Victoria, 4234], count=8]  

両方とも同じである2つの異なるremoveメソッドを試しました(1つは作成し、もう1つは数日前に最も類似した問題でStackで見つけました)。

最初の削除:

public boolean remove(Object object) {
    if (contains(object)) {
        object = null; 
        return true;
    }
    System.out.println("The object doesn't exist to delete.");
    return false;
}

他の削除:

public boolean remove(object object) {
    for (int i=0; i<(size-1); i++) {
        while (!contains(object) && size <= maxObjects) {
            set[i] = set[i+1]; size--; return true;
        }
    }
    System.out.println("Doesn't exist.");
    return false;
}

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

1

配列内のオブジェクトを見つけてから、たとえば最後のオブジェクトをそのインデックスに移動し (まだ最後でない場合)、サイズを減らす必要があります。

if (obj == null) return;

for (int i = 0; i < size; i++) {
    if (obj.equals(set[i])) {
        set[i] = set[--size];
        break;
    }
}
于 2012-10-19T09:40:49.797 に答える
0

remove メソッドは、リスト内のオブジェクトの存在を確認するだけです。

オブジェクトに null を設定しても、リストから削除されません。リストからオブジェクトを削除するには、次の操作を行う必要があります。

  1. 配列内のオブジェクトの位置を見つける
  2. 見つかった位置を配列から削除します。

位置を削除するには、インデックスの後のすべての値を左にシフトすることができます (2 番目のアルゴリズムが試みているように)。または、新しい配列を作成して、コンテンツを古いものから新しいものにコピーすることもできます (見つかったインデックスをスキップします)。

于 2012-10-19T09:42:36.563 に答える