Java面向对象方式(观察者模式)解决菲波拉契数列问题(兔子三岁后就可以生小兔子)

来源:互联网 发布:国外便宜域名 编辑:程序博客网 时间:2024/05/03 11:38

偶然看到了关于这个数学问题,就在想怎么用面向对象的方式解决问题.小弟利用蹩脚的Java语言和刚学到的观察者模式,想到了一个小办法.大家有兴趣看看吧!

原题如下:

有一对兔子,从出生后第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

                                                  

0 0
原创粉丝点击