gpt4 book ai didi

java - ArrayList.add() 不添加,不返回错误

转载 作者:行者123 更新时间:2023-11-30 03:28:11 30 4
gpt4 key购买 nike

对于我的 AP CompSci 类(class),我们正在制作一个“联系人”程序来模拟使用虚拟电话簿。主类,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> 。联系人是一个简单的对象,由字符串 name 组成。和一个 7 整数 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() 中方法,但我一直无法弄清楚任何事情。有人可以帮我吗?提前致谢。

最佳答案

我想知道为什么要扩展 ArrayList 并另外保留另一个 ArrayList 副本。除了覆盖的 add (以及 azurefrog 答案中的 size)之外,ArrayList 以及 List 接口(interface)还提供了一堆其他方法 - 我不会覆盖所有这些方法并委托(delegate)给内部列表,而是只依赖这些方法并添加我需要的功能:

public class Contacts extends ArrayList<Contact>
{
@Override
public boolean add(Contact c)
{
boolean result = super.add(c);
Collections.sort(this);
return result;
}

public ArrayList<Contact> search(String name)
{
// ...
}

}

这样您就拥有了一个成熟的ArrayList,并且可以根据您的需要对其进行扩展。

另一种选择是,直接踢出 extends 并直接实现您自己的联系人,利用内部列表作为存储而不直接公开它。

关于java - ArrayList.add() 不添加,不返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687307/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com