假设一个羊圈里面有1只羊,羊从第二年开始每年会生一只小羊(没有公母的区别,都生),但是一只羊只能活8年,第九年就死掉了,请问20年后羊圈里有多少只羊?
package born_sheep;
public class Test {
public static void main(String[] args) {
Sheeps sheeps = new Sheeps();
sheeps.run(20);
System.out.println(sheeps.getSheepNum());
}
}
---------------------------------------------------------------------------------------------------------------------------------------------
package born_sheep;
public class Sheep {
private int age;
public Sheep() {
this.age = 1;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Sheep [age=" + age + "]";
}
}
------------------------------------------------------------------------------------------------------------------------------
package born_sheep;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Sheeps {
int year;
ArrayList<Sheep> sheeps;
public Sheeps() {
sheeps = new ArrayList<Sheep>();
sheeps.add(new Sheep());
this.year = 1;
}
public void run(int y) {
while (year < y) {
year += 1;// 进入
int n = getSheepNum();
// 每只羊的年龄+1
for (int j = 0; j < n; j++) {
sheeps.get(j).setAge(sheeps.get(j).getAge() + 1);
}
// 遍历
for (int k = 0; k < n; k++) {
Sheep s = sheeps.get(k);
if (s.getAge() > 1 && s.getAge() < 9)
create();//create后原sheeps集合中的元素已增加,下次循环会遍历到1岁的羊,而1岁的羊不能create
else if (s.getAge() == 9) {
dead(k);// dead
k--;// *********指针移动,删除后,index--
}
}
System.out.println("第" + year + "年" + this.getSheepNum());
}
}
public void create() {
sheeps.add(new Sheep());
}
public void dead(int index) {
sheeps.remove(index);
}
public int getSheepNum() {
return sheeps.size();
}
public void print() {
for (Iterator iterator = sheeps.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
}
}
}
|
|