趣味java_java-趣味算法

本文探讨了如何使用Java专业背景理解并用Python实现农场母牛繁殖问题的面向对象编程解决方案。通过创建`Cows`类和`Farm`类,展示了如何模拟母牛的生命周期和繁殖规律,适合初学者理解面向对象概念和动态维护数据结构。
摘要由CSDN通过智能技术生成

最近学习了python,看得懂,但真不愿意写python的代码。

我想了想,java是我的专业和强项,我为什么要抛之而顾它呢,自己也不感兴趣

我在自己的领域做到专业就行了,别人的领域让别人去搞吧

先一技之长,再言其它

小母牛的算法题,我的头脑一向不灵活 ,算法更甚,但不妨碍我喜欢呀

农场有牛小母牛

每年生头小母牛

母牛五岁产母牛

几年农场多少母牛?

这是小学生的题目,如果列出来,找出规律,我相信现在的小朋友们应该都会的。但是我的智商没有小朋友们的高。

分析:

1、农场有只老牛,能生母牛,年纪大于5岁的,每年会生一头母牛

2、生下的小母牛,大于5岁后,才能成长为一牛老母牛,生小母牛

代码如下:

package util;

public class Cows {

private int age;//牛的年纪

public Cows() {

super();

// TODO Auto-generated constructor stub

}

public Cows(int age) {

super();

this.age = age;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//生产母牛的条件:年纪得大于5岁,返回1头小母牛,如果小于5岁,则返回空

public Cows produceCow() {

if(age>5) {

return new Cows(1);

}

return null;

}

}

package util;

/**

* 1.分析:

1.1农场开始有一头具有生育能力(年龄大于5岁)的母牛,以后每年都会生小母牛,而小母牛5年长大后又能生小母牛,从面向对象的角度分析,生小母牛的能力,

属于母牛对象,我们可以把它定义为一个内部方法;农场容纳着母牛及生产的小母牛,我们可以在农场内部维护一个长度可变的容器(集合),存储所有的母牛;

随着时间的变化,母牛的年龄在变化,农场的母牛数量也在变化,我们可以在农场中定义一个随着时间变化,而同时改变农场属性(母牛数量)和母牛属性(年龄)

功能的方法。

1.2对象:农场和母牛(属性:年龄)

1.3对象的关系,农场和母牛是组合关系

2.把对象转换为类

2.1母牛对象(年龄属性age及生育小母牛方法produceCow)

*/

import java.util.ArrayList;

import java.util.List;

public class Farm {

private static List cows;

//新建农场时的初始化,初始化一头具有生育能力的母牛(年纪5岁以上)

static {

cows=new ArrayList();

Cows cow = new Cows(5);

cows.add(cow);

}

//获取第year年母牛对象集合

public static List getCows(int year){

for(int i=0;i

//新一年的变化,统计牛场奶牛数量时,重新建一个临时奶牛圈,圈住已有的奶牛和新生的奶牛

List tempCows = new ArrayList();

for (Cows cow1 : cows) {//遍历已有奶牛圈

tempCows.add(cow1);//把原有奶牛加入新奶牛圈

cow1.setAge(cow1.getAge()+1);//原奶牛年纪+1

Cows newCow=cow1.produceCow();//原奶牛自己判断自己年纪,如果到了生育期,自动生成一头小牛,没到5岁,返回null

if(newCow!=null) {

tempCows.add(newCow);//将小牛加入新奶牛圈

}

}

cows = tempCows;//将临时奶牛圈里的所有奶牛赶入奶牛圈,原奶牛圈会越来越多的

System.out.printf("第%d年奶牛数量:%d%n",i+1,cows.size());

tempCows=null;//撤掉临时 的奶牛圈

}

return cows;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值