Как посчитать появление того же числа в массиве в Java? - PullRequest
1 голос
/ 30 июня 2011

У меня есть arraylist в java, где контент добавляется от ввода пользователя.Пользователь добавляет имя, номер месяца и номер года.Например: Имя: Боб, месяц: 4, год: 11

Моя задача - найти, сколько пользователей добавили один и тот же номер месяца в список рассылки.Подсчитайте вхождение того же номера месяца и распечатайте его.

Я знаю, что должен перебрать массив и сохранить его где-нибудь до тех пор, пока итератор не завершит поиск по коллекции массива, а затем распечатаетСколько раз был добавлен один и тот же номер месяца.

Я застрял на этой задаче.Даже тяжело это легкая задача.

Спасибо за вашу помощь!

У меня есть три класса

public class Person
{
    // The name of this user.
    private final String name;

    /**
     * Create a new user with the given name.
     * @param name The user's name.
     */
    public Person(String name)
    {
        this.name = name;
    }

    /**
     * @return The user's name.
     */
    public String getName()
    {
        return name;
    }
}

//////////// ///////////////////////

/**
 * Store details of a club membership.
 * 
 */
public class Membership
{
    // The name of the member.
    private String name;
    // The month in which the membership was taken out.
    private int month;
    // The year in which the membership was taken out.
    private int year;

    /**
     * Constructor for objects of class Membership.
     * @param name The name of the member.
     * @param month The month in which they joined. (1 ... 12)
     * @param year The year in which they joined.
     */
    public Membership(String name, int month, int year)
        throws IllegalArgumentException
    {
        if(month < 1 || month > 12) {
            throw new IllegalArgumentException(
                "Month " + month + " out of range. Must be in the range 1 ... 12");
        }
        this.name = name;
        this.month = month;
        this.year = year;
    }

    /**
     * @return The member's name.
     */
    public String getName()
    {
        return name;
    }

    /**
     * @return The month in which the member joined.
     * A value in the range 1 ... 12
     */
    public int getMonth()
    {
        return month;
    }

    /**
     * @return The year in which the member joined.
     */
    public int getYear()
    {
        return year;
    }

    /**
     * @return A string representation of this membership.
     */
    public String toString()
    {
        return "Name: " + name +
               " joined in month " +
               month + " of year " + year;
    }
}

////////////////////////////////////////////////

    import java.util.ArrayList;
    import java.util.Iterator;
    /**
     * Store details of club memberships.
     * 
     */
    public class Club
    {
        // Define any necessary fields here ...
        private ArrayList club;
       // private String member = club;
        private int joined; 
        /**
         * Constructor for objects of class Club
         */
        public Club()
        {
            // Initialise any fields here ...
            club = new ArrayList();

        }

        /**
         * Add a new member to the club's list of members.
         * @param member The member object to be added.
         */
        public void join(Membership member)
        {
          club.add(member);
          //System.out.println(member);


        }

//////////////////////////////////////////////////////////    
//    public int getJoined()
//    {
//        return joined;
//    }
//////////////////////////////////////////////////////////    
    /**
     * @return The number of members (Membership objects) in
     * the club.
     */
     public int numberOfMembers()
    {
       return club.size();
    }
///////////////////////////////////////////////////////////////////////////////////    
    public int joinedInMonth(int month)
    {
         //int joined = month;
        if(month < 1 || month > 12)
        {
            System.out.println("Not a valid month");

        }


      else{

//     int countMonth(ArrayList<Person> person, int month)
  {
      int count = 0;
        for (Club club : people)
         if (person.getMonth() == month) count++;
           return count;
} 

        }
        // using traditional for loop
       //  int joined = month;
       // for(int i = 0; i < club.size(); i++)
        //                      {

        //   System.out.println(i+1 + ": " + club.get(i));
         //  }       
//              

//               for(Iterator i = club.iterator();i.hasNext();)
//                  {
//                     
//                    System.out.println(i.next());
//   
//
//          }
         return 0;   
      }

    }

/////////////////////////////////////////////

Это то, что я имею до сих пор с методом подсчета появления одного и того же числа в массиве.:

 public int joinedInMonth(int month)
    {
        int joined = month;
        if(joined < 1 || joined > 12){
            System.out.println("Not a valid month");
            }
      else{   
           int count = 0;
          Iterator it = club.iterator();
               while(it.hasNext()) {
          Membership membership = (Membership) it.next();
           if(joined == membership.getMonth());count++;


               System.out.println("Month " + membership.getMonth());
                    return count;

но я не могу понять, как я могу сохранить значение из count в новом массиве?Любая помощь?

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

Для этого вида задач a будет использовать Hashtable<Integer, List<Person>>, где все люди определенного месяца будут индексироваться вместе в одном списке.

Hashtable<Integer, List<Person>> index = new Hashtable<Integer, List<Person>>();
for (Person person : persons) {
    if (index.get(person.month) == null) {
        index.put(person.month, new ArrayList<Person>());
    }
    index.get(person.month).add(person);
}

Вы можете получить список людей в соответствии с их месяцем. Этот код будет печатать только месяц и количество лиц, содержащихся в списке.

for (int i = 1; i <= 12; i++) {
    int count = 0;
    if (index.get(i) != null) {
        count = index.get(i).size();
    }
    System.out.println("%d: %d", i, count);
}

Хеш-таблицы действительно хороши для такого рода задач, если вам нужно перегруппировать элементы вместе или получить доступ к значению с помощью ключа (здесь это месяц как Integer и значение List<Person>).

0 голосов
/ 30 июня 2011

Поскольку вы не писали в течение 2 часов, вот один из способов:

class Person {
    String name;
    int month;
    int year;
    // with getters()
}

int countMonth(List<Person> people, int month) {
    int count = 0;
    for (Person person : people)
        if (person.getMonth() == month) count++;
    return count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...