【发布时间】:2016-04-08 21:00:46
【问题描述】:
我正在尝试创建一个基本的手机应用程序。我正在尝试(但失败)实现一项功能来查询手机上的现有联系人。我通过创建一个返回包含联系人的ArrayList 对象的方法来做到这一点。这应该通过搜索(使用for 循环)来查看特定联系人是否存在,如果存在则将其添加到ArrayList。此后,该方法应返回一个ArrayList 对象,该对象只包含查询结果。但是,在测试我的代码时,我发现每个联系人都添加到ArrayList,无论它是否与查询匹配。以下是我的代码的一些 sn-ps:
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;
}
测试我的代码 (Main.java)
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
}
没错,在使用“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
我的问题;为什么根据输入的参数输出每个联系人而不是唯一联系人?非常感谢您的回复。
【问题讨论】:
-
您是否准确地发布了您正在尝试的代码?似乎不是,因为在您发布的内容中,在执行
contactsList.add(contact)时,从未定义过contactsList。因此这不应该编译成功 -
@VicSeedoubleyew 不知道我是怎么错过的。我添加了缺少的代码。谢谢