【发布时间】:2015-04-16 22:52:04
【问题描述】:
对于我的 AP CompSci 课程,我们正在制作一个“联系人”程序来模拟使用虚拟电话簿。主类Contacts如下。
public class Contacts extends ArrayList<Contact>
{
private ArrayList<Contact> contacts = new ArrayList<Contact>();
@Override
public boolean add(Contact c)
{
contacts.add(c);
Collections.sort(contacts);
return true;
}
public ArrayList<Contact> search(String name)
{
ArrayList<Contact> temp = new ArrayList<Contact>();
for(int i = 0; i<=contacts.size(); i++)
{
if(contacts.get(i).getName().equals(name))
{
temp.add(new Contact(name));
}
}
return temp;
}
}
如您所见,它扩展了ArrayList<Contact>。 Contact 是一个简单的对象,由一个 String name 和一个 7-integer int num 组成。问题出在ContactsFactory 类中,我在其中循环一个文本文件以创建一个巨大的名称数组列表。
public class ContactsFactory {
public static Contacts getContacts() throws FileNotFoundException {
String path = System.getProperty("user.dir");
Scanner s = new Scanner(new File(path + "\\src\\names.txt"));
Contacts contacts = new Contacts();
do {
contacts.add(new Contact(s.next()));
} while (s.hasNext());
s.close();
//print size to see anything added. It returns 0.
System.out.println(contacts.size());
return contacts;
}
}
但是,当我为每个名称实现add() 方法时,它不仅似乎没有添加任何内容,而且没有返回任何错误。更有趣的是,当我在每次迭代后放置一个打印语句时发现,s.next() 不是空字符串。但是字符串(从names.txt 传输时没有遇到任何问题)没有添加到contacts,因此,ArrayList 最终为空,size() 为 0。
我认为错误可能出在被覆盖的 Contacts.add() 方法中,但我无法弄清楚任何事情。有人可以帮我吗?提前致谢。
【问题讨论】:
-
尝试扩展
AbstractList并将get、set、add和size方法委托给您的contacts变量。这样你就不需要例如担心自己提供Iterator。
标签: java arraylist overriding add contacts