私は基本的な携帯電話アプリケーションを作成しようとしています。私は電話で既存の連絡先を照会する機能を実装しようとしています(しかし失敗しています)。私は連絡先を含むArrayList
オブジェクトを返すメソッドを作成してこれを行いました。これは、特定の連絡先が存在するかどうかを調べるために(for
ループを使用して)検索し、その場合はArrayList
に追加することによって動作すると考えられます。その後、メソッドはクエリの結果だけを含むArrayList
オブジェクトを返す必要があります。しかし、自分のコードをテストすると、クエリに一致するかどうかにかかわらず、すべての連絡先がArrayList
に追加されています。ここに私のコードの一部抜粋です:当然そうArrayListにユニークなオブジェクトを追加する
public static void main(String[] args) {
char c= 'A';
for (int i = 0; i < 10; i++) {
//Create contacts with unique data
phone.addContact(Contact.createContact("Contact"+c++, "07"+i));
}
System.out.println(phone.queryContacts("VoidContact")); //Dubious entry
System.out.println(phone.queryContacts("ContactB")); //This entry exists
}
私のコード(Main.java)をテストする
Phone.java
private ArrayList<Contact> contacts;
public Phone() {
this.contacts = new ArrayList<>();
}
public ArrayList<Contact> queryContacts(String contactName) {
ArrayList<Contact> contactsList = new ArrayList<>();
for (Contact contact : this.contacts) {
if (this.findContact(contactName))
contactsList.add(contact);
}
return contactsList;
}
private boolean findContact(String contactName) {
for (Contact contact : this.contacts) {
if (contact.getName().equals(contactName))
return true;
}
return false;
}
が、私は呼び出し時に何も出力を受けていません「VoidContact」パラメータを持つphone.queryContacts()
メソッド。ただし、正当なパラメータ「ContactB」、とそれを呼び出すだけではなく、ただ一つのコンタクトを受信すると、私は(私は私のContact
クラスでObject.toString()
をオーバーライドしていることに注意してください)以下の出力が得られます。
Name: 'ContactA' Number: 070
Name: 'ContactB' Number: 071
Name: 'ContactC' Number: 072
Name: 'ContactD' Number: 073
Name: 'ContactE' Number: 074
Name: 'ContactF' Number: 075
Name: 'ContactG' Number: 076
Name: 'ContactH' Number: 077
Name: 'ContactI' Number: 078
Name: 'ContactJ' Number: 079
マイ質問;入力されたパラメータに基づくユニークな連絡先とは対照的に、すべての連絡先を出力する理由は何ですか?あなたのレスポンスに事前に感謝します。
で
equals
メソッドをオーバーライドする必要がありますか?あなたが投稿したものでは 'contactsList.add(contact)'を実行するときに 'contactsList'が決して定義されていないからです。したがって、これはうまくコンパイルするべきではありません。 –@ VicSeedoubleyew Dunnoどのように私はそれを逃した。私は不足しているコードを追加しました。ありがとう –
あなたは歓迎です:) –