2017-09-26 57 views
1

我想在java中制作一个程序,您可以添加人的生日,名字,birthmonths和birthyears。我很难想出代码从arraylist中删除一个对象,这里是下面的代码。我将如何去编写removePerson方法?如何编写一个删除方法来摆脱arraylist中的对象

import java.util.ArrayList; 

public class Analyzer { 
    // instance variables - replace the example below with your own 
    private final static int DAYS_PER_MONTH = 31; 
    private final static int MONTHS_PER_YEAR = 12; 
    private int[] birthDayStats; 
    private int[] birthMonthStats; 
    private ArrayList<Person> people; 

    /** 
    * Constructor for objects of class Analyzer 
    */ 
    public Analyzer() { 
     this.people = new ArrayList<Person>(); 
     this.birthDayStats = new int[Analyzer.DAYS_PER_MONTH]; 
     this.birthMonthStats = new int[Analyzer.MONTHS_PER_YEAR]; 
    } 

    public void addPerson(String name, int birthDay, int birthMonth, int 
      birthYear) { 
     Person person = new Person(name, birthDay, birthMonth, birthYear); 
     if (person.getBirthDay() != -1 || person.getBirthMonth() != -1) { 
      people.add(person); 
      birthMonthStats[birthMonth - 1]++; 
      birthDayStats[birthDay - 1]++; 
     } else { 
      System.out.println("Your current Birthday is " + birthDay + " or " 
        + birthMonth + " which is not a correct number 1-31 or 1-12 please " + 
        "put in a correct number "); 
     } 
    } 

    public void printPeople() { //prints all people in form: “ Name: Tom Month: 5 Day: 2 Year: 1965” 
     int index = 0; 
     while (index < people.size()) { 
      Person person = (Person) people.get(index); 
      System.out.println(person); 
      index++; 
     } 
    } 

    public void printMonthList() { //prints the number of people born in each month 
     // Sample output to the right with days being similar 
     int index = 0; 
     while (index < birthMonthStats.length) { 
      System.out.println("Month number " + (index + 1) + " has " + 
        birthMonthStats[index] + " people"); 
      index++; 
     } 
    } 

    public Person removePerson(String name) {// removes the person from the arrayList 
    } 
} 
+0

和人类?那是否覆盖了那个方法? –

+0

1.您使用迭代器遍历列表2.您比较您作为参数传递的名称是否等于当前迭代3的人名。您使用迭代器删除该人员。 < - 这应该给你足够的提示,而无需将你的作业解答放在盘子上(尽管我敢打赌有人会尽快做到这一点) –

+0

大声笑确定会尝试那些! – Stevo4586

回答

1
/** 
* Removes the {@code Person} with the given {@code name} from the list 
* @param name the {@code Person}'s name 
* @return the {@code Person} removed from the list or {@code null} if not found 
*/ 
public Person removePerson(String name) { 
    if (name != null) { 
     for (Iterator<Person> iter = people.iterator(); iter.hasNext();) { 
      Person person = iter.next(); 
      if (name.equalsIgnoreCase(person.getName())) { 
       iter.remove(); 
       return person; 
      } 
     } 
    } 
    return null; 
} 

参见java.util.Iterator#remove()方法。


周二学习奖金

如果你想寻找一个名字在名单更快,你应该考虑使用java.util.Map实现:

HashMap<String,Person> people; 

您可以添加Person以明智的方式对象以便搜索不区分大小写

people.put(name.toLowerCase(), new Person(name, ...)); 

...和你removePerson方法变成:

public Person removePerson(String name) { 
    if (name != null) 
     name = name.toLowerCase(); 
    return people.remove(name); 
} 

java.util.Map#remove()方法。

+0

与@OH GOD SPIDERS的注释相同 – fantaghirocco

+0

有人明白我只是在学习java,并且需要字面上的帮助。 – Stevo4586

+1

大家还在学:D – fantaghirocco

1

如果您使用的是Java 1.8。这是非常简单的方法。这将从您的列表中删除具有“姓名”的人。

people.removeIf(x -> name.equalsIgnoreCase(x.getName())); 
+0

upvoted:我忘了! – fantaghirocco

相关问题