• 利用面向对象解母牛生小牛问题


    面向对象的方法解下面的题目:(这是在看马士兵的设计模式的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());
    		}
    	}
    }
    

    执行结果:



  • 相关阅读:
    函数指针Demo
    设计模式笔记
    Simple Factory 模式
    百度API操作实例
    如何发邮件不被认定为垃圾邮件的技巧
    DateTimePicker中自定义时间或日期显示格式
    取得指定月份的天数
    DataGridView中的内容太长时换行显示
    Numericupdown控件value值的非空判断
    C#中用SQL语句CreatTable
  • 原文地址:https://www.cnblogs.com/riskyer/p/3249121.html
Copyright © 2020-2023  润新知