Java相关的实验室/家庭作业问题

时间:2011-02-24 00:24:00

标签: java

我的教授让我做了这两个实验室,我完成了第一个实验,但我不知道如何做第二个。

  1. 编写包含以下字段和方法的person类:名字,姓氏,应从1001开始分配的唯一ID号。返回信息的方法和返回描述格式整齐的字符串的ToString方法这个人的关键属性。
  2. 我完成了上面的那个。

    public class Person { private String first; private String last; 
    private static int idNumber = 1001; int Id; private String full;
    
    Person(){
        first = "John";
        last = "Doe";
        int idNumber;
        full = first +" "+ last; }
    
    Person(String fn,String ln){
        first = fn;
        last = ln;
        Id = idNumber++;
        full = first +" "+ last; } 
    
        static int getidNumber(){
        return idNumber; } 
    
        void setfirst(String fn) {
        first = fn; } 
    
        String getfirst(){
        return first; } 
    
        void setlast(String ln){
        last = ln; } 
    
        String getlast(){
        return last; }   
    
        @Override public String toString(){
        String p1 = "First name: " +first+ "   Last Name:" +last+
       "\tThe full name is: "+full+"  Id#"+idNumber;
            return p1;
        } }
    
    
    public class PersonTester {
    public static void main(String[] args) {
        // TODO code application logic here
    
        Person p = new Person();
        System.out.println(p);
    
        Person p1 = new Person("Dennis", "Rodman");
        System.out.println(p1);
    
        Person p2 = new Person("Michael", "Jordan");
        System.out.println(p2);
    
        System.out.println("First name: " +p1.getfirst());        
    }
    }
    
    1. 编写一个地址簿类,用于管理Person对象的集合。 addressBook允许用户在地址簿中添加,删除或搜索Person对象。
      • add方法应该将人物对象添加到地址簿中。确保add方法不会将重复的人物对象添加到地址簿中。
      • delete方法应该从书中删除指定的person对象。
      • 搜索指定人员的地址簿并返回符合指定条件的人员列表的搜索方法。搜索可以通过名字,姓氏或个人ID来完成。
    2. 为了做第2项,我需要学习什么?数组,.length?等等?我只知道非常基础,所以请帮助我。

      公共类AddressBookTester {

      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
          // TODO code application logic here
      
       }
       }
      
       import java.util.ArrayList;
        /*
        * To change this template, choose Tools | Templates
        * and open the template in the editor.
        */
       import java.util.*;
      
       public class AddressBook {
      
        private ArrayList<Person> contactList;
      
      
        AddressBook(){
          contactList = new ArrayList<Person>();
      }
      
      
      
         void add (Person P){
          if (!contactList.contains(P)){
              contactList.add(P);
          }
         }
      
          void add(String fn, String ln)
        {
              contactList.add(new Person (fn, ln));
          }
      
      
          void remove (Person P){
             contactList.remove(P);
      
         }
          ArrayList<Person> Search(String name)
          {
           for ( int i=0; i< contactList.size(); i++){
           //i dont know what to do here
      
      
          }
      
      
          Person Search (int id){
              Person p = null;
           //same here
          }
      
      }
      
      
          void printlist() {   
                  for ( int i=0; i< contactList.size(); i++){
                  Person P = contactList.get(i);
                  System.out.println(P);
                  }
              }
      
      }
      

5 个答案:

答案 0 :(得分:4)

好的,首先,您知道需要一个AddressBook类。所以你知道

class AddressBook { // something goes here
}

你知道它会有这三种方法(也许还有其他方法)

class AddressBook {
   public void add(Person p){ /* do something here */ }
   public void delete(Person p){ /* do something here */ }
   public Person searchByFirstName(String fn){ /* do something here */ ; return person;}
}

现在,考虑如何存储您的人员。目前,采取可能有效的最简单的事情,这可能是一个数组

class AddressBook {
    private Person[] p; //....

你需要创建它,所以你想要的地方p = new Person[1000]; - 我选择了1000“可能足够大”。你可以做更复杂的事情,但现在这是最简单的。

现在,问问自己“我怎样才能将一个人添加到我的数组p?”。填写。“我怎么能删除一个人?”填写。(请记住,您始终可以将null放入数组中以将该插槽标记为不再使用。)并且“如何在数组中找到一个人?”

最后,在类中添加一个main方法

    public static void main(String[] args){ /* test here */ }

让你只需运行类就可以直接测试代码。

答案 1 :(得分:1)

我会将Comparable添加到您的人员中,然后使用OrderSet或ArrayList将它们保存在您的地址簿中。好处是使用Comparable和Collections是Java会为你排序它们然后你可以只为你的目标进行二进制搜索。

答案 2 :(得分:0)

一个非常简单的实现是使用java.util.Set<Person>,因为它会为您处理所有事情。那么,看看java.util中的集合框架。

如果你想从地面做到这一点,是的,看看数组,如何定义它们,如何访问元素等等。

答案 3 :(得分:0)

我会使用一个包含java.util.Map<Integer, Person>作为地址簿的课程。由于id字段唯一标识Person,因此映射是正确的数据结构。远离阵列,因为他们需要太多的手工工作。 Lists和Sets没有Person所拥有的键:所以Map在这里是一个很自然的选择。

答案 4 :(得分:0)

您的教授可能已告诉您是否应使用 Sets LinkedLists来执行此操作。

他提到过这两个概念吗?如果是这样的话,我可以跟着你再次走过去。

也可以使用数组,但是您必须立即设置地址簿的最大大小,例如Charlie Martin在 p = new Person[1000];

中设置为1000