-3

最大 50 個の連絡先を持つ Contact オブジェクトの配列がありますが、それよりはるかに少ないため、配列は 50 のサイズで初期化されます。私が持っているものは時々うまくいくようですが、毎回ではありません。

   public Contact remove(String lstnm)
  {
       int contactIndex = findContactIndex(lstnm); // Gets the index of the Contact that needs to be removed
  Contact contactToBeRemoved;

  if(contactIndex == -1) // If the Contact is not in the Array
  {
      contactToBeRemoved = null;
  }
  else
  {
      contactToBeRemoved = Contact_List[contactIndex]; // Assigns the Contact that is going to be removed
      for(int i = contactIndex; i < numContacts; i++) // From where the Contact was removed to the last Contact in the list
      {
          Contact_List[i] = Contact_List[i + 1]; // Shift all of the Contacts after the one removed down
      }
      numContacts -= 1; // One Contact is removed from the total number of Contacts
  }
  return contactToBeRemoved;

}

4

7 に答える 7

0

私の意見では、arrayList の使い方を知っていると、Array はかなり役に立たなくなります。arrayLists を使用することをお勧めします。 ArrayList チュートリアル

ht econtact arrayList を作成するときは、次のようにします。

import java.util.ArrayList;

public static void main(String args[]){
ArrayList<Contact> contacts = new ArrayList();

連絡先.追加(新しい連絡先()); }

arrayLists を使用してください。これが最善の方法です。チュートリアルを読んでください。たくさんあります。arralist が動的であることをお勧めします。つまり、アイテムを追加および削除でき、サイズが変更されます。

私の答えが完全でなくても、私が助けてくれることを願っています

于 2013-04-09T07:17:37.370 に答える
0

すべてのシフトプロセスを実行する必要がないように、配列ではなくコレクションを使用してください! コレクションは自動的に要素をシフトするので、心配する必要はありません!

あなたは次のようにすることができます、

ArrayList<Contact> list=new ArrayList<Contact>();
Contact c=new Contact();

Contact.Add(Contact);
Contact.remove(Contact);

その他の動作は ArrayList で利用できます!

remove メソッドは次のように記述できます。

public Contact remove(String lstnm)
  {
       Contact c=new Contact(1stnm);
       Contact contactToBeRemoved=list.get(1);
       List.remove(c);
        return contactToBeRemoved;
  }

ただし、Contact クラスのオブジェクト クラスの equal() および compareTo() メソッドをオーバーライドする必要があります。そうしないと、何も正しく動作しません!

于 2013-04-09T07:13:46.947 に答える
0

そのような目的のためにArrayListを使用します

ArrayList<Contact> array = new ArrayList<Contact>(50);

初期容量が 50 の動的配列を作成します (これは、ArrayList に要素が追加されるにつれて増加する可能性があります)。

array.add(new Contact());
array.remove(contact); //assuming Contact class overrides equals()

ArrayList配列を内部的に維持し、要素が追加または削除されると、サイズ変更、再構築を行います。

Vector<Contact>同様のデータ構造ですが、スレッドセーフなwhich を使用することもできます。

于 2013-04-09T07:14:20.433 に答える
0

配列をリストに変換して、まさにあなたが説明したことを行うremove(Object o)メソッドを使用してみませんか?

時間とテストを節約できます。

于 2013-04-09T07:10:20.583 に答える
0

i+1 は配列のサイズを超えるため、コードは numContacts 番目の反復で例外を発生させます。

   for(int i = contactIndex; i < numContacts-1; i++) 
          {
              Contact_List[i] = Contact_List[i + 1]; 
          }
    Contact_List[Contact_List.length-1] = null;

Ps:このようなシナリオで Array を使用するのは非常に悪い習慣です。代わりに ArrayList を使用することを検討してください。

于 2013-04-09T07:08:12.957 に答える