java - 无法应用 ContactEntry 中的 ContactEntry()

标签 java arraylist constructor

我正在尝试在类(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/

相关文章:

带有数组的 C++ 构造函数初始化列表

java - 要设置哪些 Java 命令行选项以允许远程调试 JVM?

java - 抽象类、构造函数和接口(interface)

java - 为什么 ArrayList 的增长速度是 1.5,而 Hashmap 是 2?

java - 如何从android数据库中删除选中的项目?

c++ - C++中的构造函数参数太多

Java,Glassfish JPA : NoClassDefFoundError: javax/persistence/spi/PersistenceUnitInfo (JDK6/7 only)

java - 模拟注入(inject)的 SessionContext

java - Java中列表的动态列表

c# - 会自动调用基类构造函数吗?