`
贫僧不吃肉
  • 浏览: 62348 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

农场与母牛

阅读更多

本文属贫僧不吃肉原创,欢迎转载,转载请注明来自 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"。

 

 

 

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

 

 

 

8
3
分享到:
评论
12 楼 咖啡豆子 2011-02-22  
恩,既然OO了,依赖关系就算是一个关注点吧?
11 楼 贫僧不吃肉 2011-02-20  
咖啡豆子 写道
想问一下cow类为什么要依赖farm类啊?



"cow类为什么要依赖farm类"?  没看懂你的意思。。。你是指什么。。

你是指这个函数为什么要用Farm类作为参数传入?还是指其他的?
       public void lay(Farm f){ 
                     f.addCow(); 
       } 
10 楼 咖啡豆子 2011-02-19  
想问一下cow类为什么要依赖farm类啊?
9 楼 贫僧不吃肉 2011-02-14  
javabkb 写道
确识很有启发,有马老师上课的风范,呵呵。



共同进步、共同进步
8 楼 贫僧不吃肉 2011-02-14  
贫僧不吃肉 写道
cclsw07 写道
A boy can destroy every first girl

啊哈。。

淫才!
7 楼 javabkb 2011-02-14  
确识很有启发,有马老师上课的风范,呵呵。
6 楼 贫僧不吃肉 2011-02-14  
hellboyss 写道
不错 这思路让人豁然开朗


谢谢支持
5 楼 贫僧不吃肉 2011-02-14  
cclsw07 写道
A boy can destroy every first girl

啊哈。。
4 楼 hellboyss 2011-02-14  
不错 这思路让人豁然开朗
3 楼 cclsw07 2011-02-14  
A boy can destroy every first girl
2 楼 贫僧不吃肉 2010-12-24  
juda 写道
恩,这个思路很好,赞

刚刚发表你就来支持啦~~哈哈 ,谢谢
1 楼 juda 2010-12-24  
恩,这个思路很好,赞

相关推荐

Global site tag (gtag.js) - Google Analytics