问题: 已知一只母牛4岁开始生产(人工受孕),12岁停止生产,产下的母牛概率为50%,每只母牛每年只生一只牛, 生下来的牛视为0岁。15岁送入屠宰场,现有一只母牛(0岁),请问25年后有多少只牛?
- 使用程序进行模拟此场景,计算25年后牛数量的期望值(平均值)
- 使用面向对象的思想去处理问题,会变得更加清晰明了
- 问题分析:
- 核心对象: 牛
- 核心属性: 性别(影响是否可生育),年龄(影响是否可生育,是否能继续存活)
- 核心行为: 成长(随时间流逝牛会长大,影响其年龄),生育(产出新牛)
- 根据上述分析编写牛类
public class Niu {
/**
* 性别 1==>母牛 0==>公牛
*/
private int sex;
/**
* 年龄 生下来0岁,4岁开始生牛,12岁停止生产,15岁送屠宰场
*/
private int age;
Niu(int sex) {
this.sex = sex;
// 一只新生牛的初始化岁数
this.age = 0;
}
public void grow() {
this.age = this.age + 1;
}
public void produce(List<Niu> list) {
if (sex != 1 || age < 4 || age > 11) {
// 公牛不会生产 年龄限制不能生产
return;
}
// 母牛开始生产了 生产的性别随机使用ThreadLocalRandom随机生成 0公牛 1母牛
Niu newNiu = new Niu(ThreadLocalRandom.