面试题--牛生牛

在这里插入图片描述

今天看到一道面试题,作为小白的我初次尝试了一下解题,请大家多多指教。

解题思路:

设计一个“牛 ”类,
牛:
属性:身份证,剩余生育第一胎时间,剩余生育第二胎时间,剩余生命,死亡状态。

设计一个集合,将生下来所有的牛都存到集合里–“牛群”。

最终只统计活着的牛。

思想:

	每年遍历一次“牛群”,给相应的牛的属性做变换,如果该生新牛了给集合追加牛。
public List<Cow> cowCounter(int year){

        Counter counter = new CounterImpl();
        //牛初始身份证
        int id=0;

        //所有牛的记录
        List<Cow> list = new ArrayList<Cow>();
        //新生牛的记录
        List<Cow> list1 = new ArrayList<Cow>();

        //创建牛
        Cow cow = new Cow();
        //初始化第一头牛
        if (list.size() == 0) {
            Cow newCow = counter.creater(id);
            id++;
            list.add(newCow);
        }
        //循环遍历每一年
        for (int i = 1; i < year+1; i++) {
            //将 新生牛添加到所有牛记录中
            for (Cow cow1 : list1) {
                cow1.setAge(cow1.getAge()+1);
                list.add(cow1);
            }
            //清理上一年新生牛记录
            list1.clear();
            //创建所有牛集合的迭代器
            Iterator<Cow> iterator = list.iterator();
            //遍历牛群
            while (iterator.hasNext()){
                Cow co = iterator.next();
                //判断,如果牛剩余寿命是否大于0,牛的寿命初始化6年
                if (co.getDead()>0) {
                    //判断牛的第一胎时间是否到了,如果没到,则把第1,2台临近时间-1,生命-1,
                    if (co.getBirth1() != 0) {
                        if (co.getBirth1()>0){
                            if(co.getBirth1()-1==0){
                                co.setBirth1(0);
                                co.setAge(co.getAge()+1);
                                co.setBirth2(co.getBirth2()-1);
                                co.setDead(co.getDead()-1);
                                //第一胎时间到,创建新牛,设置生日,设置父亲身份
                                Cow newCow = counter.creater(id);
                                newCow.setBirthday(i);
                                newCow.setFaterId(co.getId());
                                id++;
                                list1.add(newCow);
                                continue;
                            } else {
                                co.setBirth1(co.getBirth1()-1);
                                co.setBirth2(co.getBirth2()-1);
                                co.setAge(co.getAge()+1);
                                co.setDead(co.getDead()-1);
                            }
                        }
                    } else if (co.getBirth2() != 0) {
                        //牛的2胎时间-1,生命-1
                        if (co.getDead()-1>0){
                            if (co.getBirth2()-1==0){
                                co.setDead(0);
                                co.setAge(co.getAge()+1);
                                //第2胎时间到,创建新牛,设置生日,设置父亲身份
                                Cow newCow = counter.creater(id);
                                newCow.setBirthday(i);
                                newCow.setFaterId(co.getId());
                                id++;
                                list1.add(newCow);
                                continue;
                            }else {
                                co.setBirth1(0);
                                co.setAge(co.getAge()+1);
                                co.setBirth2(co.getBirth2()-1);
                                co.setDead(co.getDead()-1);
                            }
                        }
                    } else {
                        //牛的2胎时间-1,生命-1
                        co.setAge(co.getAge()+1);
                        if (co.getDead()-1==0){
                            continue;
                        } else {
                            co.setDead(0);
                            //co.setFlag(true);
                        }
                    }
                } else {
                    co.setAge(6);
                    co.setFlag(true);
                }
            }
        }

        //将最后一年的新生牛添加进牛群
        for (Cow cow1 : list1) {
            list.add(cow1);
        }

        return list;
    }

放在百度云了

大家自己随便下载:
链接:https://pan.baidu.com/s/1zXBhqkTMo5_CjT29VFKnpA
密码:ec1u

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值