学习笔记:利用面向对象思想解决母牛生小牛问题

本文通过面向对象的方法,使用JAVA编程解决了农场母牛繁殖问题。构建了母牛类和牧场类,模拟了母牛从出生到成年并繁殖的过程,最终计算出20年后牧场的母牛总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

农场一头小母牛,

每牛每年生母牛;

母牛5岁产母牛,

20年后多少牛?

解决思路:

既然是利用面向对象的思路来对这道题目进行解决,那么我们首先应该想到的就是面向对象的特点:继承、多态和封装。

利用JAVA来对这道问题进行解决,首先要考虑的就是应该建立的类都有什么。在这里可以建立起两个类,一是母牛类,二是牧场类。农场类里面包含成年母牛和未成年母牛两个母牛类对象的集合。牧场有牧场年龄,随着年龄增长小母牛逐渐长大,而已经成年的 母牛则会生出新的小母牛。牧场类可以读取总的母牛数,其中包括了所有的小母牛和成年母牛。

具体实现:

创建类:母牛类(Cow())、牧场类(Pasture())

类属性:母牛类——年龄(age)         牧场类——oldCows群体(age>=5)、newCows群体(age<5)

类方法:母牛类——产小牛(productCow())          牧场类——获取牛总数(getNum())

代码编写:

母牛类:

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;
	}
	
}

牧场类:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class Pasture {

	private static List<Cow> oldcows,newcows;  //牧场中成年母牛和小母牛的集合
	
	static {
		oldcows = new ArrayList<>();
		newcows = new ArrayList<>();
		Cow cow=new Cow(5);  //最初的5岁母牛
		oldcows.add(cow);
	}
	
	//设定牧场所过的年份
	public static void getNums(int year) {
		for(int i=0;i<year;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) {
		Pasture.getNums(20);
	}
 
}

 

 

总结反思:

最近毕业后开始进行面试,发现在面试笔试题的最后部分会有这样一道题来考察对于面向对象思想的理解和掌握,当时自己对于这类问题没有经验,并没有做出一个满意的答案。回来后开始对这类问题进行查阅和学习,最终在借鉴了前辈的经验的基础上用自己能够方便理解的方式写出了这篇博客,在此特别感谢I_find_it的原贴学习笔记20170312——JAVA解决农场母牛生baby的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值