题目---牛生牛---面向对象

农场一头小母牛,
每年生头小母牛。
母牛五岁产母牛,
二十年上多少牛?

/**
 * 一群牛的故事
 */
import java.util.ArrayList;
import java.util.List;
/**
 * 母牛
 * @author dinghun8leech
 */
class Cow {
    /** age 年龄 */
    private int age;
    /**
     * 默认构造方法,创建(生产)一头年龄为1岁的小母牛
     */
    public Cow() {
        age = 1;
    }
    /**
     * 成长,母牛年龄+1
     */
    public void grow() {
        age++;
    }
    /**
     * 生产,当母牛年龄在5岁或以上时产生1头小母牛
     * 年龄低于5岁时无法生产,返回null
     * @return Cow 一头年龄为1岁的小母牛
     */
    public Cow produce() {
        if (age > 4) {
            return new Cow();
        }
        return null;
    }
}
/**
 * 怪兽牧场
 * @author dinghun8leech
 */
public class Farm {
    public static void main(String [] args) {
        int year = 20;//测试年限
        int init_cow_count = 1;//牧场起始小母牛数量
        List<Cow> cows = new ArrayList<Cow>();//牛棚
        for (int i=0;i<init_cow_count;i++) {
            cows.add(new Cow());
        }
        for (int i=0;i<year;i++) {
            int cow_count = cows.size();
            for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛
                Cow cow = cows.get(j);
                Cow newCow = cow.produce();
                if (newCow != null) {//看看当前年龄能否生产小牛
                    cows.add(newCow);  //这里的编程技巧,cows是扩充的,用一个变量来控制下标
                }
                cow.grow();//每年都会成长
            }
        }
        System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");
    }
}


//下面用递归方法,变成纯算法问题。。。。




你可能感兴趣的:(编程,算法,J#)