本帖最后由 陈圳 于 2013-4-16 12:08 编辑
- package exercises;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
- import java.util.Random;
- public class OtherCattle {
- /**一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。现在有一个农夫有1头1岁大的母牛,
- * 在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,写出相关的代码或答题思路,最好用面向对象。
- * @param args
- */
- public static void main(String[] args) {
- System.out.println(new CattleField().getCount(13));
- }
- /*程序随机性比较强,我用测试语句测试到40时,发现有误.如果有兴趣,可以自行更改.因为他没有一个固定的值,公/母是随机的.
- */
- }
- class CattleField{//牛场,可以做得更形象,一个牛场,一个牛类,因为程序大体已经出来了.但是要学的东西多了,就不细分了.程序做出来就行了.
- private int age=1;//如果是牛类,可以再加一个姓名属性,这样可以在下面程序中形象的打印,某某牛生什么性别的崽,叫什么,然后某某牛大于12,该去死了.
- private String sex;
- private int num;//隐含的牛编号
- public static int cattleCount=1;
- private static List<CattleField> cattle=new ArrayList<CattleField>();
- CattleField(){
- cattle.add(new CattleField(1,"母"));//农夫的第一头母牛
- }
- CattleField(int age,String sex){
- this.num=cattleCount++;
- this.age=age;
- this.sex=sex;
- }
- public CattleField ageIncrease(){//年龄增加
- this.age++;
- return this;
- }
- public String getSex(){//获得新生牛的性别
- if(new Random().nextInt(2)>0)
- return "公";
- else return "母";
- }
- public int getCount(int n){//获取多少年后,牧场的牛数
- while(n>0){
- /*for (ListIterator<CattleField> in = cattle.listIterator(); in.hasNext();) {//每过一年,牧场的牛,母牛超过3岁要生产,大于12的要挂掉
- CattleField cte=in.next();
- if (cte.sex == "母" && cte.age > 2) {
- in.add(new CattleField(0, getSex()));// 出生了一头牛,性别是随机的
- cattleCount++;
- }
- if(cte.age==12){//大于12岁,就让它去死;
- in.remove();
- }
- cte.age++;
- cte=in.previous();
- in.set(cte);//这里替掉一下集合内的元素
- }*/
- //不用迭代器,涉及到修改元素时,有些费劲.直接用set与get来玩.
- for(int i=0;i<cattle.size();i++){
- if (cattle.get(i).sex == "母" && cattle.get(i).age > 2) {
- cattle.add(new CattleField(0, getSex()));// 出生了一头牛,性别是随机的
- }
- if(cattle.get(i).age==12){//大于12岁,就让它去死;
- System.out.println("第:"+cattle.remove(i).age+"头牛挂了");
- cattleCount--;
- }
- //让每头牛的年龄都增加
- CattleField tempCattle=cattle.get(i).ageIncrease();
- cattle.set(i,tempCattle);
- }
- System.out.println(cattle);
- n--;//年数减点;
- }
- /*for(Iterator<CattleField> in=cattle.iterator();in.hasNext();){
-
- }*/
- return cattle.size();//这里我返回这个数量有误,不找原因了.返回集合却是对的.
- }
- public String toString(){
- return "第"+this.num+"头"+this.sex+"牛"+"年龄为:"+this.age;
- }
- }
复制代码 |