A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yd52xd 初级黑马   /  2019-6-26 17:52  /  651 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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;
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马