留的作业:
农场一头小母牛,
每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?
马老师给的这个问题我个人感觉不太好理解,就按照我自己的理解吧,我把题目给白话文一下:
农场中引进一只超级母体牛,它每年都可以生一只普通小牛,而它生下的普通小牛到5岁的时候会
生下一只普通小牛,以后就不会再生。问这个农场20年后有多少只牛(包括超级母牛)?
分析问题,这是一个群体繁衍的问题,一定要在每个年份判断清楚谁该生谁不该生。
首先我们要确定主角,肯定是牛了,所以我们设计一个Cow类来代表牛类:
确定了实体类,我们下面来设计生长算法(下面用母体代指超级母牛):
1.首先,母体每年都要生牛犊
2.其次,每过一年所有普通牛(除母体)都涨一岁
3.再次,每一只普通牛到5岁就会出生一只年龄为0的牛犊
4.最后,限制条件,除母体每年生一只牛外,普通牛一生只有5岁时生牛犊
为了统计方便,我决定将所有牛放在"牛圈"里(List集合中),新生牛犊就add。
我写的代码:
我们来手算一下这段程序是否正确:
我把year<20改成year<6,也就是6年后是多少,程序运行后是8只牛,下面手算一下:
第一年:母牛一只,新生小牛一只(0岁),共2只
第二年:母牛一只,新生小牛两只(1岁,0岁),共3只
第三年:母牛一只,新生小牛三只(2岁,1岁,0岁),共4只
第四年:母牛一只,新生小牛四只(3岁,2岁,1岁,0岁),共5只
完成了视屏中马老师布置的训练面向对象思想的作业,说实话这里面没有体现多少面向对象的思
想,也许是因为之前用面向过程的思想做ACM久了有些习惯一时半会改不了吧。见笑了。
农场一头小母牛,
每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?
马老师给的这个问题我个人感觉不太好理解,就按照我自己的理解吧,我把题目给白话文一下:
农场中引进一只超级母体牛,它每年都可以生一只普通小牛,而它生下的普通小牛到5岁的时候会
生下一只普通小牛,以后就不会再生。问这个农场20年后有多少只牛(包括超级母牛)?
分析问题,这是一个群体繁衍的问题,一定要在每个年份判断清楚谁该生谁不该生。
首先我们要确定主角,肯定是牛了,所以我们设计一个Cow类来代表牛类:
Cow.java:
package cn.edu.OOtest; public class Cow { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } }里面有一个age属性,是用来记录牛的年龄的,这样我们就可以清楚的知道哪头牛5岁了该生牛犊了。
确定了实体类,我们下面来设计生长算法(下面用母体代指超级母牛):
1.首先,母体每年都要生牛犊
2.其次,每过一年所有普通牛(除母体)都涨一岁
3.再次,每一只普通牛到5岁就会出生一只年龄为0的牛犊
4.最后,限制条件,除母体每年生一只牛外,普通牛一生只有5岁时生牛犊
为了统计方便,我决定将所有牛放在"牛圈"里(List集合中),新生牛犊就add。
我写的代码:
package cn.edu.OOtest; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class CowProductTest { public static void main(String[] args) { Cow cowParent=new Cow();//这是母体 cowParent.setAge(-1);//年龄是-1为了区分母体,因为它每年都生孩子 List<Cow> cowList=new ArrayList<Cow>();//list集合,相当于牛圈 cowList.add(cowParent);//将母体装入牛圈 int year=0; while(year<20){ year++; for(int i=0;i<cowList.size();i++){ Cow cow=cowList.get(i); if(cow.getAge()!=-1){//非母体的所有牛都涨一岁 cow.setAge(cow.getAge()+1); } if(cow.getAge()==5){//有牛长到5岁,就生出一只新的牛 Cow cowSon=new Cow(); cowSon.setAge(0);//刚出生的牛的年龄为0周岁 cowList.add(cowSon); } } //下面是母体每年必生的一只牛 Cow cowSon=new Cow(); cowSon.setAge(0);//刚出生的牛的年龄为0周岁 cowList.add(cowSon); } System.out.println("二十年后共有"+cowList.size()+"只牛"); } }运行结果:二十年后共有57只牛
我们来手算一下这段程序是否正确:
我把year<20改成year<6,也就是6年后是多少,程序运行后是8只牛,下面手算一下:
第一年:母牛一只,新生小牛一只(0岁),共2只
第二年:母牛一只,新生小牛两只(1岁,0岁),共3只
第三年:母牛一只,新生小牛三只(2岁,1岁,0岁),共4只
第四年:母牛一只,新生小牛四只(3岁,2岁,1岁,0岁),共5只
第五年:母牛一只,新生小牛五只(4岁,3岁,2岁,1岁,0岁),共6只
第六年:母牛一只,新生小牛六只(5岁,4岁,3岁,2岁,1岁,0岁)+普通牛生的一只(0岁),共8只
完成了视屏中马老师布置的训练面向对象思想的作业,说实话这里面没有体现多少面向对象的思
想,也许是因为之前用面向过程的思想做ACM久了有些习惯一时半会改不了吧。见笑了。
如果有更好的程序,也希望大家提出更好的意见。
转载请注明出处: http://blog.csdn.net/acmman