本帖最后由 yd52xd 于 2019-6-26 17:59 编辑
来黑马学习已经已经一周了,开课到现在讲的都是一些基础的部分,虽然难度不大,但是里面可以挖掘的内容却是根据不同的人有不同的高度,就拿讲逻辑运算符来说吧,“&&”和“&”的区别在老师讲到的时候,其中一个最大的区别就是一个有短路效果一个没有短路效果,这样也就是点到为止了,不深究,这样才能更好的去学习下一个内容,这一点是所有人都学到了,但是如果一个不小心把“&&”写成了“&”,而且运算的数据又恰好是整数时,就会出现一个意外的结果,或者说,自己在好奇心的趋势下,判断它们两个的区别,先用布尔类型的数据进行运算,在用整型数据进行运算,就得到了自己无论如何都想象不到的结果,正常来说,它们得到的结果都是布尔类型的,如果你用整型数据进行运算时会发现“&”对整型数据进行运算时得到的结果居然也是个整数,这就奇怪了,怎么会出现整数,而且进一步测试发现,并不是巧合,而是必然,只要是整型数据用“&”进行运算,得到的数据就是整型,接下来需要做的就是去解决这个问题了,或问老师,或网上搜索资料,都是可以解决自己的疑问的,解决之后,你就又会学习一项新技能就是二进制,再进行扩展就是更多的进制运算了,甚至还会牵涉到计算机的存储数据模式,比如如何存储负数以及内存相关的内容,总之,就好像是一条线一样,牵着你不断的去发现新大陆,而这个新大陆是远远望不到尽头的,你在短时间内根本看不到尽头。 学习技术就是不断的去发现未知的东西,而后让自己未知的东西东西变成已知,这就是我对学习技术的认知,而且表面上看起来简单的东西未必就如自己所知道的那么简单,或许只是自己的深度还不够而已。最后,奉上不死神兔的递归版和for循环版代码,虽然很简单,但也是过去某个时代的经典之作。 [Java] 纯文本查看 复制代码 /**[/align] * @description: 不死神兔案例
* @author: yd93
* @createTime: 2019-06-24 21:06:47
**/
public class RabbitAlive {
/**
* 解题思路:首先找到生小兔的规律,即第三个月等于前两个月之和,调用递归方式实现
*/
public static void main(String[] args) {
int num = addRabbit(20);
System.out.println(num);
System.out.println(addRabbitFor(20));
}
/**
* 递归调用实现生小兔子案例 1 1 2 3 5 8 13 21 34
*
* @param month
* @return 返回兔子对数
*/
public static int addRabbit(int month) {
final int FIRST_MONTH = 1;
final int SECOND_MONTH = 2;
if (month == FIRST_MONTH || month == SECOND_MONTH) {
return 1;
} else {
return addRabbit(month - 1) + addRabbit(month - 2);
}
}
/**
* for循环实现生小兔子的案例
*
* @param month
* @return 返回兔子对数
*/
public static int addRabbitFor(int month) {
//for循环实现不死神兔问题
final int FIRST_MONTH = 1;
final int SECOND_MONTH = 2;
int first = 1;
int second = 1;
int count = 0;
for (int i = 1; i <= month; i++) {
if (i == FIRST_MONTH || i == SECOND_MONTH) {
count = first;
} else {
//把第一个月的数量赋值给first 把第二个月的数量赋值给second,把第三个月的值赋值给count
count = second + first;
first = second;
second = count;
}
}
return count;
}
}
|