无法应用ContactEntry中的ContactEntry()

时间:2019-01-28 04:51:01

标签: java arraylist constructor

我正在尝试在班级联系人列表下建立姓名和电子邮件的关联列表。但是我不知道我的代码出了什么问题,或者更确切地说,我到底缺少了什么?

方向是:

“一个特别常见的数据结构是关联列表。关联列表的标准示例是字典。字典将定义与单词相关联。给定一个单词,您可以使用字典来查找其定义。我们想到了字典是形式为(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");
}
}

3 个答案:

答案 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 nameString email的构造函数。看起来像

public ContactEntry(String name, String email) {
    this.name = name;
    this.email = email;
}