Java:修改,搜索和从数组列表条目中删除

时间:2015-05-13 17:23:10

标签: java arrays arraylist

学习,善待。

我有一个地址簿,我需要用户能够根据他们的名字删除一个条目,根据他们的名字修改一个条目,并根据他们的名字搜索一个条目(你猜对了)。

我看了一些例子,但我对如何做到这一点很遗憾。任何帮助将不胜感激。

这是我的班级文件:

import java.util.Calendar;
import java.util.Date;
import java.text.*;

public class Person implements Comparable {


    private static int totalNumber;

    public static int getTotal() {

        //Returns total number of employees
        return totalNumber;
    }

private String fullName;
private String fName;
private String lName;
private Date lastModified;
private String address;
private String city;
private String state;
private String zip;
private String phone;

public Person(String fName, String lName, String address, String city, String state, String zip, String phone) {
    this.fName = fName;
    this.lName = lName;
    this.address = address;
    this.city = city;
    this.state = state;
    this.zip = zip;
    this.phone = phone;     
    Calendar calobj = Calendar.getInstance();
    this.lastModified = calobj.getTime();
}

public String getfullName() {
    return this.fullName;
}
public void setfullName(String fullName) {
    this.fullName = this.fName + this.lName;
}
public String getfName() {
    return this.fName;
}

public void setfName(String fName) {
    this.fName = fName;
}

public String getlName() {
    return this.lName;
}

public void setlName(String lName) {
    this.lName = lName;
}

public Date getLastModified() {
    return this.lastModified;
}

public void setLastModified(Date lastModified) {
    this.lastModified = lastModified;
}

public String getAddress() {
    return this.address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getCity() {
    return this.city;
}

public void setCity(String city) {
    this.city = city;
}

public String getState() {
    return this.state;
}

public void setState(String state) {
    this.state = state;
}

public String getZip() {
    return this.zip;
}

public void setZip(String zip) {
    this.zip = zip;
}

public String getPhone() {
    return this.phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

@Override
public String toString() {
    DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
    return "\n First Name= " + fName + 
            "\n Last Name= " + lName + 
            "\n Address= " + address + 
            "\n City= " + city + 
            "\n State= " + state + 
            "\n Zip= " + zip + 
            "\n Phone= " + phone + 
            "\n Last Modified= "
            + df.format(lastModified); 
}

@Override
public int compareTo(Object other) {
    // TODO Auto-generated method stub
    return this.lName.compareToIgnoreCase(((Person) other).lName);

}








}

这是我的测试文件:     public class testAddressBook {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ArrayList<Person> addressBook = new ArrayList<Person>();
        Person newPerson = new Person(null, null, null, null, null, null, null);


        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        boolean switcher = true;
        do {
            System.out.println("\n\tAddress Book Menu");
            System.out.println("\n\t\tEnter A to (A)dd Person ");
            System.out.println("\t\tEnter D to (D)elete Person");
            System.out.println("\t\tEnter M to (M)odify Person");
            System.out.println("\t\tEnter S to (S)earch Address Book ");
            System.out.println("\t\tEnter L to (L)ist ALL (sorted) ");
            System.out.println("\t\tEnter Q to Quit");
            System.out.print("\n\tPlease enter your choice: ");
            char choice = sc.nextLine().toUpperCase().charAt(0);


            while ((choice != 'A') && (choice != 'D') && (choice != 'M')  && (choice != 'S') && (choice != 'L')&& (choice != 'Q')) {
                System.out.println("Invalid choice!  Please select (A)dd, (D)elete, (M)odify, (S)earch, (L)ist or (Q)uit: ");
                choice = sc.nextLine().toUpperCase().charAt(0);
            }


            switch (choice) {
            case 'A' :      
                System.out.println("\nTo add a person, follow the prompts.");
                newPerson = new Person(null, null, null, null, null, null, null);
                System.out.print("\nEnter First Name: ");
                newPerson.setfName(sc.nextLine());

                System.out.print("\nEnter Last Name: ");
                newPerson.setlName(sc.nextLine());

                System.out.print("Enter Address: ");
                newPerson.setAddress(sc.nextLine());

                System.out.print("Enter City: ");
                newPerson.setCity(sc.nextLine());

                System.out.print("Enter State: ");
                newPerson.setState(sc.nextLine());

                System.out.print("Enter Zip: ");
                newPerson.setZip(sc.nextLine());

                System.out.print("Enter Phone Number: ");
                newPerson.setPhone(sc.nextLine());

                        addressBook.add(newPerson);

                System.out.println("\nYou have successfully added a new person!");

                break;

            case 'D' :

                break;
            case 'M' :

                break;
            case 'S' :

                System.out.println("Please enter first & last name (ex. Bob Smith): ");
                String fullName = sc.nextLine();

                if (addressBook.contains(fullName)) {
                    System.out.println("Yes, this person exists!");

                    } else {
                        System.out.println("ALERT!  No record of that name exists in this address book.");
                    }

                        break;
            case 'L' :
                System.out.println("\nThere are " + addressBook.size() + " people in this address book.\n");
                Collections.sort(addressBook);


                for (int i = 0; i < addressBook.size(); i++) {
                    System.out.println(addressBook.get(i));


                }
                    System.out.println();


                break;
            case 'Q' :
                switcher = false;
                System.exit(0);
                break;
            default:

            }

        }
        while (switcher != false);


    }
}

3 个答案:

答案 0 :(得分:3)

对于此处的所有内容,您必须要求用户提供一些输入,然后对该输入执行操作

要删除

您可以遍历列表,也可以通过从User输入传递元素来获取索引。您可以使用这样的remove方法: -

<Your Arraylist>.remove(<Index of Element to be remove>);

修改

使用ArrayList的get(index)方法获取该特定值,然后使用set更新该值。

搜索

使用get方法找到它如果不存在,则显示Yes {Do Something}然后显示否{Do Something}

在此处提及Methods of ArrayList http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

答案 1 :(得分:0)

你需要准确地确定你想要做什么,你有什么数据结构,以及后者如何支持前者。

例如&#34;根据他们的名字搜索一个条目。&#34;这是程序行为的典型用户级规范。我们怎样才能更准确?也许我们可以说&#34;在AddressBook中找到一个名字与输入完全匹配的人,但忽略大写/小写的差异。&#34;这仍远远高于工作代码的精确度,但它让你的思维更专注于问题的细节。

您的主要数据结构是

 ArrayList<Person> addressBook = new ArrayList<Person>();

Person个对象的列表。因此,以下代码行

if (addressBook.contains(fullName)) {

虽然语法上有效,但并不是真的在问你的想法。你问的是,这个人员名单中是否包含这个字符串&#34;?当你这样说时,答案显然是否定的,因为它里面没有任何字符串,只有人。声明这样的方法会更好:

private boolean findPersonWithName(List<Person> people, String name) {
  for (Person p : people) {
    if (p.getFullName().equalsIgnoreCase(name)) {
      return p;
    }
  }

  // didn't find anyone
  return null;
}

答案 2 :(得分:-1)

搜索

public List<Person> getEntryByName(String name){
    List<Person> foundList = new ArrayList<Person>()
    for(Person p: addressBook){
        if(p.getFullName().contains(name))
            foundList.add(p);
    }
}

删除:

public void removeEntriesByName(String name){
    int count = 0;
    Iterator<Person> i = addressBook.iterator();
    while (i.hasNext()) {
        Person p = i.next();i.remove()
        if (p.getFullName().contains(name)){
            i.remove();
            addressBook.remove(index);
        }
    count++;
    }
}