Java 联系人列表程序

Java 联系人列表程序,java,Java,我的任务是创建一个基本的联系人列表程序,让用户 输入新联系人 打印联系人列表 按姓氏检索联系人 电子邮件,以及 检索特定邮政编码中的联系人 我的想法是创建3个类: Main()、Contact()和ContactList()。我会让main()处理菜单和逻辑Contact()将是我为每个联系人实例化的类对象ContactList()将是定义联系人对象数组的类,并定义输入和检索信息的方法 问题是我不知道该怎么做。我的上述方法有效吗?我不太清楚该怎么做,如果您有任何建议和想法,我将不胜感激。我会让您

我的任务是创建一个基本的联系人列表程序,让用户

  • 输入新联系人
  • 打印联系人列表
  • 按姓氏检索联系人
  • 电子邮件,以及
  • 检索特定邮政编码中的联系人 我的想法是创建3个类:

    Main()
    Contact()
    ContactList()
    。我会让
    main()
    处理菜单和逻辑
    Contact()
    将是我为每个联系人实例化的类对象
    ContactList()
    将是定义联系人对象数组的类,并定义输入和检索信息的方法


    问题是我不知道该怎么做。我的上述方法有效吗?我不太清楚该怎么做,如果您有任何建议和想法,我将不胜感激。

    我会让您的联系人列表实现一个通用列表

    public class ContactdList implements List<Contact> 
    
    公共类联系人列表实现列表
    

    但是,是的,这听起来很管用。我假设这是一门课,你不想太离题老师要求/教授的内容。

    我会有
    联系人列表
    只有必要的有意义的方法:

    interface ContactList {
        void add(Contact)
        List<Contact> getList()
        Contact getContactByLastName(String)
        Contact getContactByEmail(String)
        Contact getContactByZipCode(String)
    }
    
    接口联系人列表{
    无效添加(联系人)
    List getList()
    联系人getContactByLastName(字符串)
    联系人getContactByEmail(字符串)
    联系人getContactByZipCode(字符串)
    }
    

    然后,您可以使用一个
    ContactArrayList
    来实现该接口,它使用
    ArrayList
    作为备份对象。

    以下是我的想法,并提供一些伪代码

    下面的类是一个基于需求的联系人应该包含哪些内容的基本实现。我选择使用字符串字段,因为这只是一个家庭作业问题,不需要额外的工程

     public class Contact  
        {  
            private String firstName;  
            private String lastName;  
            private String email;  
            private String zipCode;  
            public Contact()  
            {  
              //initialize all variables to empty string  
            }
    
            public Contact(String firstName,String lastName, String email, String zipCode)  
            {    
               //Use this.variableName to set values
            }
            //getters/setters
        }    
    
    
    
        public class Assignment1 //Or whatever assignment number this is == Main()   
        {    
    
           List<Contact> contacts;
           public static void main(String[] args)  
           {    
              //Retrieve user input
              // Execute rest of program
           }  
    
           void printContacts(List<Contact> contacts)  
           {
              foreach(Contact in contacts)  
              {  
                    print(Contact.toString());
              }
           }
    
           Contact getContactByLastName(String lastName)  
           {
                foreach(Contact in contacts)  
                {
                     if(Contact.lastName == lastName)  
                            return Contact;
    
                }  
                  else  
                      Contact does not exist
           }    
    
           void addContact(Contact contact)  
           {
                contacts.add(contact);    
           }
    
    
        }  
    
    公共类联系人
    {  
    私有字符串名;
    私有字符串lastName;
    私人字符串电子邮件;
    私有字符串zipCode;
    公众联络()
    {  
    //将所有变量初始化为空字符串
    }
    公共联系人(字符串firstName、字符串lastName、字符串email、字符串zipCode)
    {    
    //使用this.variableName设置值
    }
    //能手/二传手
    }    
    公共类Assignment1//或这是==Main()的任何赋值号
    {    
    列出联系人名单;
    公共静态void main(字符串[]args)
    {    
    //检索用户输入
    //执行程序的其余部分
    }  
    作废打印联系人(列出联系人)
    {
    foreach(触点中的触点)
    {  
    打印(Contact.toString());
    }
    }
    联系人getContactByLastName(字符串lastName)
    {
    foreach(触点中的触点)
    {
    如果(Contact.lastName==lastName)
    回接;
    }  
    其他的
    联系人不存在
    }    
    无效添加联系人(联系人联系人)
    {
    联系人。添加(联系人);
    }
    }  
    
    创建一个新的列表实现没有意义,那么
    公共类ContactList扩展ArrayList如何?@jornb87:这也可以,但会将您绑定到ArrayList。如果你决定要一个LinkedList呢?当然,在这种情况下,这是不太可能的,所以我可能想得太多了……这两个都实现了相同的接口,所以无论如何,这将是一个简单的重构,对吗?您能用Java参数化该类以实现参数列表中的类型吗?我对Java中的泛型知之甚少。@keith.layne:在这种情况下,我可能过度设计了它,但……这取决于谁在使用它。如果您控制所有的代码(在本例中可能是这样),那么重构可能会相当容易。如果另一方面,如果你不这样做,你就破坏了所有取决于你的课程的东西。因为它已经实现了List,所以我看不出参数化会给您带来什么。@jmoreno我的意思是扩展。我的错。与
    公共类联系人列表中一样,它扩展了T
    。我不知道Java的合法性和可行性。可能对这个问题也没什么帮助。嘿,谢谢你的帮助。你能看看我上面的框架代码吗?这篇文章现在已经编辑好了。请看一看我上面列出的问题。我认为这应该是一个单独的问题。@jmoreno,如果你的意思是我应该通过说单独的问题来创建另一个主题,我已经这样做了,并且因为“重新发布”而关闭了我的主题