Java面向对象方式(观察者模式)解决菲波拉契数列问题(兔子三岁后就可以生小兔子)
2014-03-28 18:59
274 查看
偶然看到了关于这个数学问题,就在想怎么用面向对象的方式解决问题.小弟利用蹩脚的Java语言和刚学到的观察者模式,想到了一个小办法.大家有兴趣看看吧!
原题如下:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序:
程序结果:
原题如下:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序:
// 周期对象,控制时间自动增长,被观察的对象 class Clock extends Observable { private static Clock clock; public static int rabbitcount = 0; // 现有兔子数量 public static Clock getInstance() { // 单例模式,大家公用一个时间 if (clock == null) { clock = new Clock(); } return clock; } public void run() { // 时间开始走动 for (int i = 1; i <= 12; i++) { // 12个月 this.setChanged(); this.notifyObservers(i); // 唤醒观察者 System.out.println("面向对象思想:第" + i + "个月的兔子数量是:" + rabbitcount); } } } class Rubbit implements Observer { // 兔子(观察者:观察时间) int birthMoth; public Rubbit(int birthMoth) { // 初始化兔子的出生时间 this.birthMoth = birthMoth; } public void update(Observable o, Object month) { Integer now = (Integer) month; if (now - birthMoth >= 2) { // 如果兔子达到三岁就可以生出一对小兔子 Clock.rabbitcount += 1; // 兔子的数量增加一对 Clock.getInstance().addObserver(new Rubbit(now)); // 将小兔子变成观察者,并告诉它自己出生的时间 } } } public class RubbitCount { // 数学思想 public static void count() { int f1 = 1; int f2 = 1; int f = 0; int M = 12; System.out.println("普通数学思想:第1个月的兔子数量是:" + f2); System.out.println("普通数学思想:第2个月的兔子数量是:" + f2); for (int i = 3; i <= M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("普通数学思想:第" + i + "个月的兔子数量是:" + f2); } } public static void main(String[] args) { // 面向对象设计思想---------- Clock.getInstance().addObserver(new Rubbit(1)); Clock.rabbitcount += 1; Clock.getInstance().run(); // 数学思想 count(); } }
程序结果:
面向对象思想:第1个月的兔子数量是:1 面向对象思想:第2个月的兔子数量是:1 面向对象思想:第3个月的兔子数量是:2 面向对象思想:第4个月的兔子数量是:3 面向对象思想:第5个月的兔子数量是:5 面向对象思想:第6个月的兔子数量是:8 面向对象思想:第7个月的兔子数量是:13 面向对象思想:第8个月的兔子数量是:21 面向对象思想:第9个月的兔子数量是:34 面向对象思想:第10个月的兔子数量是:55 面向对象思想:第11个月的兔子数量是:89 面向对象思想:第12个月的兔子数量是:144 普通数学思想:第1个月的兔子数量是:1 普通数学思想:第2个月的兔子数量是:1 普通数学思想:第3个月的兔子数量是:2 普通数学思想:第4个月的兔子数量是:3 普通数学思想:第5个月的兔子数量是:5 普通数学思想:第6个月的兔子数量是:8 普通数学思想:第7个月的兔子数量是:13 普通数学思想:第8个月的兔子数量是:21 普通数学思想:第9个月的兔子数量是:34 普通数学思想:第10个月的兔子数量是:55 普通数学思想:第11个月的兔子数量是:89 普通数学思想:第12个月的兔子数量是:144
相关文章推荐
- 面向对象方式解决比赛名单类问题(Java实现)
- Java线程并发干扰问题及解决方式(锁对象)
- Java面向对象思想解决猜拳问题
- 用事件和观察者模式解决经典面向对象题目:猫叫鼠跑人醒的题目
- 我的第一篇博客,java面向对象来解决简单的问题--杭电2001
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程并发干扰问题及解决方式(锁对象)
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- Java线程并发干扰问题及解决方式(锁对象)
- Java单实例对象或单例模式下的同步问题
- Java 读取ANSI文件中文乱码问题解决方式
- 使用观察者模式解决包相互依赖的问题
- 解决Java中int不能为空而Oracle数据库中Number可以的问题
- 5本最佳的Java面向对象理论和设计模式的书籍