案例需求:不死神兔?
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问第二十个月的兔子对数为多少?
备注
Ps:看Java基础看到的案例,很基础的东西,我好像不太会,所以不多说,盘它!
想法构思:
月份 1 2 3 4 5 6 7 8 9 ...
兔子对数 1 1 2 3 5 8 13 21 34 ...
从上面规律可以看出来,第三个月起就是简单的前两个月累加数据。恍然大悟,曾经学过的斐波那契数列?
不过好像已经忘得差不多了,百度一下!
泪流满面,16年初一的题目把我难住了,我对不起我以前的数学老师。
其实到这里,这个题目已经结束了,但是本着写blog划水的精神,上代码!
public class Rabbit {
public static void main(String[] args) {
int rabbitNumber[]=new int[20];
rabbitNumber[0] = 1;
rabbitNumber[1] = 1;
for (int month =2;month< rabbitNumber.length;month++){
rabbitNumber[month] = rabbitNumber[month-1] + rabbitNumber[month-2];
}
System.out.println(rabbitNumber[19]);
}
}
加坑系列:
在撸代码的时候我犯了一个常识性问题,不多说先上代码。
//错误代码
public class Rabbit {
public static void main(String[] args) {
int rabbitNumber[]=new int[20];
rabbitNumber[0] = 1;
rabbitNumber[1] = 1;
for (int month =2;month<= rabbitNumber.length;month++){
rabbitNumber[month] = rabbitNumber[month-1] + rabbitNumber[month-2];
}
System.out.println(rabbitNumber[19]);
}
}
很多时候都没感觉到有错,但是偏偏就错了。写完其实我没感觉到这个代码有问题,但是编译运行后显示数组越界。
其实这个问题一眼就可以看出来,但是侧面反映了我自身的一个问题,对于数组这块了解还不够清晰。
所以有事问百度,整理下数组的基础操作问题:
- 索引越界,ArrayIndexOutOfBoundsException,刚刚踩得雷,创建一个数组的大小为20的数组,其索引应该是0-19,但是定义循环变量month的时候就那么一丢丢丢的不小心,month冲上了20,产生索引越界,程序报错,感觉很丢脸,自己很伤心。
ps:索引,通俗的说就是数组的代号,跟耳熟能详的007好像没啥区别。不过要注意的是索引是从0开始,如果创建数组大小为20,最大索引应该是19,这也是我踩坑的点。 - 空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常。ps:这个坑以后碰到了再埋!
写了半天感觉没啥意思,上个blog post写的是键盘输入,这一版没道理不用,要不然觉得不得劲。安排!
需求升级:
不死神兔从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
现在有一个养殖场看中了不死神兔的潜力,但是不知道无法预计未来市场。
因此,他需要做一个养殖周期和引进种兔数量预案,来了解他可能获得的兔子数量,从而获得收益。
变量1:养殖场预计养殖周期,养殖场预计引进种兔数量。 结果:养殖场在养殖周期完成后能获得多少只兔子。
废话不多说,上代码。
public class Rabbit {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("养殖场预计养殖周期为几个月:");
int month = scanner.nextInt();
int rabbitNumber[]=new int[month];
System.out.print("请输入养殖场预计引进多少只兔子:");
rabbitNumber[0] = scanner.nextInt();
rabbitNumber[1] = rabbitNumber[0];
for (int i =2;i< rabbitNumber.length;i++){
rabbitNumber[i] = rabbitNumber[i-1] + rabbitNumber[i-2];
}
System.out.println("养殖场在养殖周期过后可获得兔子数量:"+rabbitNumber[month-1]);
}
}