zoukankan      html  css  js  c++  java
  • 用面向对象的思想设计问题

    本例子以一道面试题为例

        农场一头小母牛, 每年生头小母牛, 母牛五岁产母牛, 二十年上多少牛?

    在设计类以及设计对象的问题上、我们可能会以农场、母牛分别添加一个类,在分析类之后,对于该类的属性以及类的方法,又怎么分的呢?

    由题目上所看出的,农场有牛,牛有岁数,岁数一到就又可以new 一头小牛.

    然后以此类推,不妨我们可以用递归的方式来进行对牛进行判断循环并添加,题中求返回20年内农场里有多少头牛

    因此我们可以对农场Farm的属性Cow以集合的方式定义,并且,农场必须还有添加小牛的方法,每年农场增加的小牛的方法#### 

    那么,是如何想到这些个方法呢?

      认真读题! 从题中提取关键字,关键名词,(比如 农场【有很多牛,每年农场都有牛】,母牛【可以生产小牛,五岁以下不可以生产#因此可以年龄是必须定义的】)

    相信读到这里应该已经恍然大悟了吧!!!

    先贴上我的代码

    package com.choviwu.java;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    /**
     * 农场一头小母牛, 
     * 每年生头小母牛, 
     * 母牛五岁产母牛, 
     * 二十年上多少牛?
     * @author ThinkWu
     * @date 2017年8月7日
     */
    public class Farm {
    
        private List<Cow> cows = new ArrayList<Cow>();
    
        //add
        public void addCows(Cow cow){
            cows.add(cow);
        }
        
        public void everyYear(){
            
            for (int i = 0; i < 20; i++) {
                //every cow 's index
                for(int j = 0;j<cows.size();j++){
                    Cow cow  = cows.get(j);
                    int age = cow.getAge();
                    if(age>=5)
                        this.addCows(cow.getCow());
                }
                System.out.println((i+1)+"   "+this.cows.size());
            }
            
        }
        
    }

    package com.choviwu.java;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    /**
     * 农场一头小母牛, 
     * 每年生头小母牛, 
     * 母牛五岁产母牛, 
     * 二十年上多少牛?
     * @author ThinkWu
     * @date 2017年8月7日
     */
    public class Farm {
    
        private List<Cow> cows = new ArrayList<Cow>();
    
        //add
        public void addCows(Cow cow){
            cows.add(cow);
        }
        
        public void everyYear(){
            
            for (int i = 0; i < 20; i++) {
                //every cow 's index
                for(int j = 0;j<cows.size();j++){
                    //得到每只牛的实例
                    Cow cow  = cows.get(j);
                    //获取每只牛的年龄并且判断是否符合条件
                    int age = cow.getAge();
                    if(age>=5)
                        this.addCows(cow.getCow());
                }
                System.out.println((i+1)+"   "+this.cows.size());
            }
            
        }
        
    }
    package com.choviwu.java;
    
    /**
     * 
     * @author ThinkWu
     * @date 2017年8月7日
     */
    public class TestFarm {
        public static void main(String[] args) {
            Farm f = new Farm();
            f.addCows(new Cow(5));
            f.everyYear();
        }
    }
  • 相关阅读:
    vue双向绑定的时候把遍历的数组转为了字符串,并且再转回去数组进行绑定
    使用for of循环遍历获取的nodeList,配置babel编译,webpack打包之后在iphone5下报错
    iview表单验证不生效问题注意点
    babel配置项目目录支持转换es6语法,引入非项目目录js后,引入Js转换无效
    swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
    移动网页广告引入mraid.js使用指南
    react项目和next项目修改默认端口号
    windows安装mongodb服务简洁版教程
    Fiddler抓包手机代理配置
    手机配置代理报错invalid host header
  • 原文地址:https://www.cnblogs.com/ChoviWu/p/7300048.html
Copyright © 2011-2022 走看看