hello 大家好
今天有个小问题:讲的是在一个小岛上,理想条件下有一对兔子,经过两个月生长后会第三个月开始每个月生殖一对兔子,问个月多少兔子?
通过这个图相信大家理解啦,就是兔子生下来第三个月第一对红的生了一对绿的,绿的长大后第三个月会再生,而第四个月红的又生了一个蓝的,以此类推
看数值变化我们也看到了规律,就是前两天之和是后一天的;
这时候我们就可以下一个方法来实现这个函数
首先我们建一个工程java project 然后点击工程,右击src,new一个class ,在主函数下边写我们的方法
public static void main(String[] args)
{
}
public static void rabbitNum()
{
int moth1=1;//初始化为第一月兔子数量
int moth2=2;//初始化为第二月兔子数量
int sum=0;//兔子数量
int i=3;
while(i<=30)
{
sum=moth1+moth2;//前两月之和就是当月兔子数量
System.out.println("第"+i+"月兔子数量"+sum);
moth1=moth2;
moth2=sum;
i++;
}
然后在主函数中写我们调用方法语句:
public static void main(String[] args)
{
Funtion.rabbitNum();
}
运行查看我们结果:
我们观察结果,发现和我们想要的一样 在这个函数中我们用的while循环,因为兔子总数用int存储的,这要考虑到int的存储大小,天数超过37好像就不行啦,需要开更大的整型去存储。
我们来写另一个优化的方法,这次我们用for循环写:
public static void rabbitNum2()
{
int moth1=1;
int moth2=2;
for(int i=3;i<=30;i++)
{
moth1=moth1+moth2;
moth2=moth2+moth1;
System.out.println("第"+i+"月的兔子数量"+moth1);
System.out.println("第"+ ++i +"月的兔子数量"+moth2);
}
}
然后写我们调用方法的语句
public static void main(String[] args)
{
//Funtion.rabbitNum();
Funtion.rabbitNum2();
}
这里我们还是把一个语句注释掉,只调用第二种方法:
运行观察结果,你会发现和第一种一样:
这个代码中涉及到了:
++i 是先做自增在进行别的运算,比如此代码中就是先自己加一代表下一天,然后执行被打印出来,如果换成i++就会结果出现重复月,但是数量还是正确,这就是所说的顺序执行问题。
这个代码为啥说优化啦,因为循环次数减少一半,一次循环输出两个月的结果。