问题:

农场一头小母牛,

母牛每年生母牛。

母牛5岁产母牛,

20年后多少牛?

PS:前提:第一头母牛已经>=5岁

思路脉络:

面向对象基本思想,注意状态和行为,抽象出对应的属性和方法

1、Object Oriented思想

考虑类:母牛、农场

PS:一开始可能不会想到把农场设计为一个类。但母牛是成长在农场里的,随着时间推移,农场里的母牛数量不断增长。

考虑属性:母牛有age、农场有oldcows群体(age >= 5) 和 newcows群体(age < 5)。

考虑方法:母牛可以生产小母牛:produceCow() ;农场可以得到母牛总数 :getNums()

考虑类之间的关系:农场的属性oldcows、newcows是母牛的对象集合

2、具体实现

类Cow:

public class Cow {

private int age; //母牛属性:年龄

public Cow(int age) {

super();

this.age = age;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Cow produceCow() {

if(age >= 5) {

return new Cow(0); //若母牛年龄 >= 5岁,则生产小母牛

}

return null;

}

}

类Farm:

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class Farm {

//农场的老母牛集合(age>=5)、小母牛集合(age<5)

private static List oldcows,newcows;

static {

oldcows = new ArrayList<>();

newcows = new ArrayList<>();

Cow cow=new Cow(5); //最初的5岁母牛

oldcows.add(cow);

}

//获取第year年的母牛总数

public static void getNums(int year) {

for(int i=0;i

for(Cow cow : newcows) {

cow.setAge(cow.getAge()+1);

}

for(Cow cow : oldcows) {

cow.setAge(cow.getAge()+1);

}

for(Cow cow : newcows) {

if(cow.getAge() >= 5) {

oldcows.add(cow);

newcows.remove(cow);

break; //对java.util.ConcurrentModificationException的处理

}

}

for(Cow cow : oldcows) {

Cow babycow = cow.produceCow();

newcows.add(babycow);

}

System.out.printf("第%d年农场有%d只母牛呢!%n", i+1, oldcows.size() + newcows.size());

}

}

}

主类:

public class Test {

public static void main(String[] args) {

Farm.getNums(20);

}

}

问题反思:

1、在方法produceCow()中,如果将生出的小baby设置为0岁:

return new Cow(0);

2、一开始运行时会报错:java.util.ConcurrentModificationException(并发修改异常)

原因:在对newcows进行遍历的时候,并发地对它进行了remove操作

解决:在remove操作后立即执行break跳出foreach语句。

3、在for(int i=0;i

一开始是将母牛age的++都写到了newcows和oldcows各自的遍历当中去的,但是这样程序就会有bug:新的一年变成5岁的母牛被放入oldcows后,age再次被++。所以要进行一些修改。

java一只母牛 一年生头小牛_面向对象思想 解决农场母牛生小牛问题相关推荐

  1. 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛

    1 题目描述 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛. 假设每次生的都是母牛,并且也遵守4年才生育并生母牛的原则.且所生的牛都不会死 问20年之后共有多少头牛 ...

  2. java一只母牛 一年生头小牛_Java实现:工厂有一头母牛,一年生一头小母牛,小母牛五年后可以生小牛,问20年工厂有多少头牛?...

    共回答了16个问题采纳率:93.8% 文件Mooooo.java如下: import java.util.ArrayList; public class Mooooo { public static ...

  3. java 一个父类派生两个子类_面向对象 - 1.继承/2.派生/3.继承的实现原理

    1.继承:指的是类与类之间的关系,是一种什么是什么的关系,继承的功能是解决代码的重用问题,继承是一种创建新类的方式 python 中新建的类可以继承一个或多个父类(基类或超类) 新建的类称为派生类或子 ...

  4. C语言 母牛生小牛问题 多组测试数据

    题目描述: 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? 输入: 输入数据由多个测试实例组成,每个测试实例占一行, ...

  5. c语言母牛生小牛程序框图,C语言母牛问题

    一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛.假设每次生的都是母牛,并且也遵守4年才能生育并生母牛的原则,并且无死亡,请问N年后共有过少头牛? 看到这个题目的时候 猛 ...

  6. java是如何编写我的世界_我的世界插件制作详细图文教程 教你制作强大的CraftBukkit插件...

    我的世界里有着各种不同的插件,这些插件能实现非常非常多的功能,以至于有些功能都难以置信,下面游戏园的小编就为大家解析一下我的世界怎么自己制作插件,那么到底我的世界插件制作都需要准备哪些呢?下面就请大家 ...

  7. java只允许单一继承_问题:Java语言只允许单继承,指每个类只能有一个 ( )

    问题:Java语言只允许单继承,指每个类只能有一个 ( ) 更多相关问题 用List命令显示表文件中的当前记录的命令格式是________. WHERE子句的条件表达式中,可以匹配0个到多个字符的通配 ...

  8. java 数组 取部分_在Java中只获取一部分数组?

    在Java中只获取一部分数组? 我在Java中有一个Integers数组,我只想使用它的一部分. 我知道在Python中你可以做类似这个数组[index:]的东西,它从索引中返回数组. 这样的事情在J ...

  9. java 牛生小牛_牛生小牛的递归算法

    //关于牛的算法 //算法概述:设牛寿命无限 4年成年可以生小牛 依次类推求n年后牛的数量 //算法:用一个数组cow[4] cow[0]为成年牛 cow[1]为一年牛 cow[2]为两年牛 cow[ ...

最新文章

  1. 前牙正常覆盖是多少_个性化舌侧矫治器的前牙转矩控制技巧——赵志河教授
  2. 商场促销——策略模式
  3. 折半查找python实现
  4. css文本超出隐藏 显示三个点
  5. linux版azure应用服务,【应用服务 App Service】解决无法从Azure门户SSH登录问题
  6. 21-7-28 git学习复习
  7. 使用SAXReader所需jar包
  8. 2019最新第三方支付牌照公司名单「完整」
  9. K8s 集群上运行ca机制
  10. Vue中报如下错误Uncaught (in promise) NavigationDuplicated解决方案
  11. 央行数字货币(数字人民币)DCEP
  12. 利用dns特性把普通域用户提升到域管理员权限
  13. 大数据播报 | 数据悄悄告诉你“私有云背后的秘密”
  14. windows计划任务执行powershell脚本
  15. 给编程一个你热爱它的机会
  16. js怎么获取电脑硬件信息
  17. 认清GPU的流处理器作用
  18. springboot-鑫源停车场管理系统毕业设计源码290915
  19. python123创意绘画_Turtle 创意绘画
  20. brpc internal

热门文章

  1. 深圳联络易管理系统如何解决企业微信客户分散问题
  2. Windows8开发指南(10)Windows8王者归来,Windows8必胜,所有程序员都认真关注了。
  3. dl dt dd 用法
  4. 解决:MacOS 苹果系统 微信截图 app截图 无法正常使用
  5. unable to resolve docker endpoint: open C:\Users\Administrator.DESKTOP-50KV77E\.docker\machine\machi
  6. 有信号测试软件吗,(推荐)手机频率与信号测试软件Cellular-Z使用方法
  7. 优秀课程案例:使用Scratch制作扫雷经典版!
  8. python flask sqlalchemy慢日志记录
  9. 2.gazebo手动构建简单模型
  10. 相比人类,机器人护理更加让老人没负担?