失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java一只母牛 一年生头小牛_面向对象思想 解决农场母牛生小牛问题

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

时间:2023-10-18 22:34:12

相关推荐

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

问题:

农场一头小母牛,

母牛每年生母牛。

母牛5岁产母牛,

后多少牛?

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一只母牛 一年生头小牛_面向对象思想 解决农场母牛生小牛问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。