农场与母牛

本文属贫僧不吃肉原创,欢迎转载,转载请注明来自 http://never-say-never.iteye.com/blog/851512

 

 

今天看马士兵老师的视频,看见了一道有意思的笔试题,农场与母牛

 

题目是这样的:

 

农场一头小母牛,

 母牛五岁产母牛,

 每年生头小母牛,

 二十年有多少牛。

 

感兴趣的同学请在此思考20秒。。。。

 

 

看到此题,我的第一反应就是递归啊、函数什么的。接着老师说了一句:“请不要先把思维陷入到算法里,先用面向对象的思维来考虑……”。 这时,我才突然反应过来,我的面向过程思维根深蒂固,面向对象思维还需加强呐!同时,由于换了个思维,所以这道题也勾起了我的兴趣,于是着手实现起来

 

 

 

//母牛类

public class Cow {
     private int age;  //有一个属性,年龄
    
       public Cow(){
              this.age=0;    //构造函数,默认生下来的小崽为0岁
       }

 
       public void grow(){
              this.age++;    //长一岁
       }

       

       public int getAge(){
              return age;       //返回牛的年龄
      }

       //生崽
       public void lay(Farm f){
                     f.addCow();
       }

}
 

 

 

接着抽象农场类

 

 

import java.util.Vector;

public class Farm {

    private Vector<Cow> cows;  //农场的牛群,用vector盛放,
    
   
	private int count=0;              //农场的总牛数
	
	public Farm(){
		cows=new Vector();  //若不new Vector直接赋值为null的话会引发空指针异常
	}
	
    //得到总牛数
	public int getCount() {
		 count=cows.size();
		 return count;
	}
	
    //增加一头牛
	public void addCow(){
		this.cows.addElement(new Cow());
	}
	
//农场进入下一年,满了5岁的牛就产崽并长一岁,没满的就只长一岁	
public void nextYear(){
		int before=cows.size();
		for(int i=0;i<before;i++){
			Cow c=(Cow)cows.elementAt(i);
			if(c.getAge()>=5){
				c.grow();
				c.lay(this);			
			}
			else{
				c.grow();
		}
	}
	}
	
   //为了显示方便,我就直接把main写在Farm类里面了
	public static void main(String [] args){
	
		Farm farm=new Farm();
		farm.addCow();

		for(int i=1;i<=20;i++){	
	     	farm.nextYear();
	    	System.out.println("第 "+i+"年有牛 :"+farm.getCount());
		}
				
	}
}

 


 

第 1年有牛 :1
第 2年有牛 :1
第 3年有牛 :1
第 4年有牛 :1
第 5年有牛 :1
第 6年有牛 :2
第 7年有牛 :3
第 8年有牛 :4
第 9年有牛 :5
第 10年有牛 :6
第 11年有牛 :7
第 12年有牛 :9
第 13年有牛 :12
第 14年有牛 :16
第 15年有牛 :21
第 16年有牛 :27
第 17年有牛 :34
第 18年有牛 :43
第 19年有牛 :55
第 20年有牛 :71

 

 

在纸上推了一下,貌似是对的。

 

 

题目不难,但是有一些细节如果没注意的话,还是会很恼人,牛是在第5岁的时候产下崽还是第6岁的时候把崽产下来,比如刚生下来的崽是0岁而不是1岁,对象的引用,等。

 

   所以,虽然简单,也还是花了我一些时间的~

 

 

    再送个好玩的段子~

 

    女孩问男孩: "abcdefg是什么意思呀"?

     男孩想了一会说:“A boy can do everything for girl"。

 

 

 

最后,附上代码供大家交流~~

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值