Что не так с этим кодом, который пытается вычислить парадокс дня рождения с помощью ArrayLists?

#java #arraylist #birthday-paradox

Вопрос:

Шансы должны быть примерно на 10% больше, насколько я понимаю. Однако я никогда не смогу преодолеть 7 процентов, даже если проведу 7000 тестов. Я полагаю, что это, должно быть, расчет количества совпадений, но я не могу понять, как это неправильно.

 import java.util.ArrayList;
import java.util.Random;

public class PersonRoom {
    
    private int persons;

    private int loops;
    
    public int getPersons() {
        return persons;
    }

    public int getLoops() {
        return loops;
    }
    
    public PersonRoom(int persons, int loops) {
        this.persons = persons;
        this.loops = loops;
    }

    public void generatePersons(ArrayList<Person> students) {
        
        Random rng = new Random();
        
        for(int i = 0; i < persons; i  ) {
            students.add(new Person(rng.nextInt(365)   1));
        }
    }
    
    public boolean matchBirthday(ArrayList<Person> students) {
        
        for(int i = 0; i < students.size() - 1; i  ) {
                if(students.get(i).getBirthday() == students.get(i   1).getBirthday()) {
                    return true;
                }
            }
        return false;
        }
    
    public double probability() {
        
        double matchCount = 0;
        
        for(int i = 0; i < loops; i  ) {
            
            ArrayList<Person> students = new ArrayList<>();
            
            generatePersons(students);
            
            if(matchBirthday(students)) {
                matchCount  ;
            }
            
        }
        return (matchCount/loops) * 100;
    }
    
}
 

Комментарии:

1. Пожалуйста, сформулируйте, что вы думаете о парадоксе дня рождения, и посмотрите matchBirthday , что именно происходит.