今天看到一道面试题,作为小白的我初次尝试了一下解题,请大家多多指教。
解题思路:
设计一个“牛 ”类,
牛:
属性:身份证,剩余生育第一胎时间,剩余生育第二胎时间,剩余生命,死亡状态。
设计一个集合,将生下来所有的牛都存到集合里–“牛群”。
最终只统计活着的牛。
思想:
每年遍历一次“牛群”,给相应的牛的属性做变换,如果该生新牛了给集合追加牛。
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