我正在尝试在班级联系人列表下建立姓名和电子邮件的关联列表。但是我不知道我的代码出了什么问题,或者更确切地说,我到底缺少了什么?
方向是:
“一个特别常见的数据结构是关联列表。关联列表的标准示例是字典。字典将定义与单词相关联。给定一个单词,您可以使用字典来查找其定义。我们想到了字典是形式为(w,d)的成对列表,其中w是单词,d是其定义。一般关联列表是成对列表(k,v),其中k是一些“键”值,而v是与该键关联的值。通常,我们要假设列表中没有两对具有相同的键。关联列表的基本操作是:给定键k,找到关联的值v用k(如果有)。
关联列表在计算机科学中非常广泛地使用。例如,编译器必须跟踪与每个变量关联的内存中的位置。它可以通过关联列表来完成此操作,其中每个键都是变量名,而关联的值是该变量在内存中的地址。另一个示例是联系人列表,如果我们认为它是将电子邮件地址与列表中的每个名称相关联。列表中的项目可以是属于该类的对象:
联系人列表的数据由ContactEntry的ArrayList和一个整数变量组成,用于跟踪列表中实际存储了多少个条目。联系人列表也可能是属于该类的对象:
请注意,搜索方法getEmail返回与键名name关联的值。这通常是通过关联列表完成的。
该程序可能会进行很多改进。
修改ContactEntry,添加设置器,获取器,默认构造函数以及以名称和电子邮件作为输入的构造函数。
修改ContactList以使用上面的内容,并添加自己的设置器,获取器和默认构造函数。
除非列表中的数据可以永久保存(即保存在文件中),否则联系人列表几乎没有用。将以下方法添加到联系人列表程序,以便将其姓名和电子邮件地址列表保存在文件中。
感谢任何提前帮助我的人。我不是最亮的星星。
提供了一些示例和起始代码,但我确定问题已经过去了。我已经尝试使用谷歌搜索问题,但是一切都不尽相同,我不确定我到底是什么问题。
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");
}
}
答案 0 :(得分:0)
您尚未为您的类定义constructor,这意味着它仅具有隐式无参数构造函数(new ContactEntry()
)。如果要使用名称和电子邮件的构造函数,则必须对其进行定义。
答案 1 :(得分:0)
ContactEntry类中应该有一个参数化的构造函数。
public ContactEntry(String name,String email){
this.name=name;
this.email=email;
}
答案 2 :(得分:0)
您需要所谓的constructor。甲骨文说
一个类包含构造函数,这些构造函数被调用以根据类蓝图创建对象。
构造函数允许您创建一个保存数据的对象。默认情况下,所有类都有一个“默认构造函数”,它只是空的,看起来像
public ContactEntry() {
}
您需要一个包含String name
和String email
的构造函数。看起来像
public ContactEntry(String name, String email) {
this.name = name;
this.email = email;
}