我正在尝试在类(class)联系人列表下创建姓名和电子邮件的关联列表。但我不知道我的代码有什么问题,或者更准确地说,它缺少什么?
方向是:
“一个特别常见的数据结构是关联列表。关联列表的标准示例是字典。字典将定义与单词关联起来。给定一个单词,您可以使用字典来查找其定义。我们可以将字典视为 (w,d) 形式的对列表,其中 w 是单词,d 是其定义。一般关联列表是对 (k,v) 的列表,其中 k 是某个“键”值,v 是与该键关联的值。一般来说,我们希望假设列表中没有两对具有相同的键。关联列表的基本操作是:给定一个键 k,找到与 k 关联的值 v(如果有)。
关联列表在计算机科学中应用非常广泛。例如,编译器必须跟踪与每个变量关联的内存位置。它可以通过关联列表来做到这一点,其中每个键都是一个变量名称,关联值是该变量在内存中的地址。另一个例子是联系人列表,如果我们将其视为将电子邮件地址与列表中的每个姓名相关联。列表中的项目可以是属于该类的对象:
联系人列表的数据由 ContactEntry 的 ArrayList 和一个整数变量组成,用于跟踪列表中实际存储了多少条目。联系人列表可以是属于该类的对象:
请注意,搜索方法 getEmail 返回它找到的与键 name 关联的值。这通常是通过关联列表来完成的。
该程序还需要大量改进。
修改 ContactEntry,添加 setter、getter、默认构造函数以及输入为姓名和电子邮件的构造函数。
修改 ContactList 以使用上述内容并添加其自己的 setter、getter 和默认构造函数。
除非列表中的数据可以永久保存(即保存在文件中),否则联系人列表毫无用处。将以下方法添加到联系人列表程序中,以便将其姓名和电子邮件地址列表保存在文件中。
感谢所有提前帮助我的人。我不是最亮的星星。
提供了一些示例和起始代码,但我确信问题已经过去了。我尝试用谷歌搜索这个问题,但一切都不同了,我不确定我的问题到底是什么。
public class ContactEntry {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private String email;
}
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;
public class ContactList {
private ArrayList<ContactEntry> list=new ArrayList<ContactEntry>();
private int entries=0;
public void addEntry(String name,String email){
ContactEntry entry=new ContactEntry(name, email);
list.add(entry);
entries++;
}
public String getEmail(String name){
for(ContactEntry entry:list){
if(entry.getName().equals(name)){
return entry.getEmail();
}
}
return null;
}
public static ContactList LoadContacts(String filepath){
File file=new File(filepath);
try (Scanner scan=new Scanner( file )){
ContactList contactList=new ContactList()
while(scan.hasNext()){
String line=scan.nextLine();
int pos=line.indexOf(':');
String name=line.substring(0,pos);
String email=line.substring(pos+1);
contactList.addEntry(name,email);
}
return contactList;
}
catch (FileNotFoundException e){
e.printStackTrace();
return null;
}
}
public void storeContacts(String filepath){
File file=new File(filepath);
try(PrintWriter pwt=new PrintWriter(file)){
for(ContactEntry entry:list){
pwt.println(entry.getName()+":"+entry.getEmail());
}
}
catch(FileNotFoundException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
ContactList contactList=new ContactList();
ContactList.addEntry( name:"tim",email:"tim@gmail.com");
ContactList.storeContacts(filepath:"contacts.txt");
}
}
最佳答案
您需要所谓的 constructor 。甲骨文说
A class contains constructors that are invoked to create objects from the class blueprint.
构造函数允许您创建一个保存数据的对象。默认情况下,所有类都有一个“默认构造函数”,它是空的,看起来像
public ContactEntry() {
}
您需要一个接受字符串名称
和字符串电子邮件
的构造函数。这看起来像
public ContactEntry(String name, String email) {
this.name = name;
this.email = email;
}
关于java - 无法应用 ContactEntry 中的 ContactEntry(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54395712/