如何循环以在Arraylist中找到最大值

时间:2017-09-25 13:29:04

标签: java arraylist

我有这个项目,我正在制作你导入你的生日,名字,分娩和出生月份。我正在尝试制作一个找到最受欢迎的生日的方法,例如,“最受欢迎的日期是生日空白的第16个。我知道我必须绕着birthDayStats循环,但我怎么写呢? 这是我的代码,我遇到问题的方法是在底部。

import java.util.ArrayList;
import java.util.Collections;

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 void mostPopularDay() { //finds the most popular Day of the year
        Object obj = Collections.mostPopularDay(birthDayStats);
        System.out.println(obj);
    }
}

1 个答案:

答案 0 :(得分:1)

你必须遍历包含日期的数组,找到最高计数并返回该值的索引。

public int mostPopularDay() { //finds the most popular Day of the year
    int popularDay = 0;
    int max = -1;
    for(int i = 0; i < birthDayStats.length; i++) {
        if(birthDayStats[i] > max) {
            max = birthDayStats[i];
            popularDay = i;            
        }
    }
    return popularDay + 1;  //Adding +1 since there is no 0th day of the month
}

请记住,这只会返回生日最受欢迎的日子,而不是最受欢迎的日期。但我认为这就是你想要的。