利用面向对象解母牛生小牛问题
2013-08-09 22:46
281 查看
用面向对象的方法解下面的题目:(这是在看马士兵的设计模式的Thinking_in_oo中最后给出的一道题)
题目:
农场一头小母牛,
每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?
题目:
农场一头小母牛,每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?
题目解析:
按照我的理解,农场首先有一头小母牛,当小母牛长到五岁的时候,它就成了老母牛了,然后就可以每年生小母牛了。根据题目意思,母牛五岁的那年就可以生小母牛了,问第20年的时候有多少头牛。(疑问:第20年生的小母牛算不算,也就是说算的是第20年刚开始时之前的母牛个数还是第20年末之前所有母牛个数),我是按第20年年末算。OO(面向对象分析):
分析类:
从题目中可以看出有两个类,农场类和母牛类。分析类的属性:
农场类:只有一个存储所有母牛的List集合。母牛类:只有一个年龄类,其它类似name的属性在这里不需要。分析类的方法:
母牛类:addCow()方法,每当农场生了一只小牛,就将这只牛加入到集合中。getCowsNumber()方法,获得农场所有母牛的数量。everyYear()方法,每年牛都需要长一岁,并且大于等于5岁的母牛都要生一头小牛,在这个方法中体现。具体代码:
package com.zyh; public class Cow { private int age; public Cow() { this.age = 0; } //五岁后可生产一头小母牛 public Cow giveBirth() { return new Cow(); } //每年年龄都是要增加的 public void growth() { this.age++; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.zyh; import java.util.ArrayList; import java.util.List; public class Farm { // 存放所有的牛 private List<Cow> cows = new ArrayList<Cow>(); // 农场里生出里一头母牛,当然要添加到牛群中 public void addCow(Cow cow) { cows.add(cow); } public int getCowsNumber() { return cows.size(); } //每年牛都要长一岁,并且到年龄了就产小母牛 public void everyYear() { for (int i = 0; i < cows.size(); i++) { Cow cow = cows.get(i); //每年母牛都要增长一岁 cow.growth(); //如果年龄到了,就在该年开始产小母牛 if (cow.getAge() >= 5) { cows.add(cow.giveBirth()); } } } }
package com.zyh; public class TestCow { public static void main(String[] args) { int year = 20; Farm farm = new Farm(); // 刚开始,必须有头母牛 farm.addCow(new Cow()); // 调用方法计算 for(int y=1; y<year; y++) { farm.everyYear(); System.out.println("第" + y + "年,共有:" + farm.getCowsNumber()); } } }
执行结果:
相关文章推荐
- 利用面向对象解母牛生小牛问题
- 面向过程,面向对象,函数式对同一个问题的思考方式
- HDU_2018——母牛产小牛的问题,递推
- .NET 7期同学面向对象学习中问题总结
- 利用c#面向对象实现对数据库的操作
- 面向对象入门的18个问题
- 母牛生小牛问题
- java学习之旅45--面向对象_18_多态_基本概念_强制转型问题_instanceof运算符
- 农场一头小母牛,每年生头小母牛,母牛5岁产母牛,20年上多少牛?--java面向对象方式实现
- java面向对象问题小记
- java面向对象概述及javac的对象问题
- ActionScript 3.0 Step By Step系列(五):走在面向对象开发的路上,以类为基础去思考编程问题
- 面向对象常见问题总结
- 面向对象蚂蚁爬杆的问题
- 遇到一个面向对象无法解决的问题。
- Java之面向对象相关问题集
- 【小题目】母牛产小牛问题
- 关于面向对象里的子类继承问题
- 面向对象继承实例(a如何继承b问题)(自写)
- Web项目中使用NLog记录日志,利用单件模式控制整个项目只有一个Logger对象的问题