【准确猜出你的生日】——Java小练习
目录
分为两个部分:月份和日期
月份猜测
日期猜测
结合输出
我们来测试一下
- 学习完Java基础,来做个小case。
-
只需学会简单的输入、输出语句和位运算就能准确猜出你的生日啦!
分为两个部分:月份和日期
月份猜测
12个月看成数字12 ,把12用二进制表示,可以用4个二进制位。因此我们可以把在[1,12]之间,处在二进制第一位上为 1 的所有数列出来,以此类推把第二位、第三位、第四位上为 1的所有数都分别列出来。
第一位上是1则保留在原位上,不是1那么输入0;第二位是1则项左移动一位 "1<<1";第三位是1则项左移动两位 "1<<2";第四位是1则项左移动三位 "1<<3",每一次位运算后把前面的数也加起来,最后就是最终的月份啦!
String mon1 = " 1 3 \n" + " 5 7 \n" + " 9 11"; String mon2 = " 2 3 \n" + " 6 7 \n" + " 10 11"; String mon3 = " 4 5 \n" + " 6 7 \n" + " 12 "; String mon4 = " 8 9 \n" + " 10 11\n"+ " 12 "; int month = 0; System.out.println("你的生日(月份)在这个集合里面吗?"); System.out.println(mon1); System.out.println("是,请输入1;否请输入0:"); int answer1 = input.nextInt(); month += answer1 * 1; System.out.println("你的生日(月份)在这个集合里面吗?"); System.out.println(mon2); System.out.println("是,请输入1;否请输入0:"); answer1 = input.nextInt(); month += answer1 * (1<<1); System.out.println("你的生日(月份)在这个集合里面吗?"); System.out.println(mon3); System.out.println("是,请输入1;否请输入0:"); answer1 = input.nextInt(); month += answer1 * (1<<2); System.out.println("你的生日(月份)在这个集合里面吗?"); System.out.println(mon4); System.out.println("是,请输入1;否请输入0:"); answer1 = input.nextInt(); month += answer1 * (1<<3);
日期猜测
其实跟月份一样的道理
一个月最多有31号看成数字31 ,把31用二进制表示,可以用5个二进制位。因此我们可以把在[1,31]之间,处在二进制第一位上为 1 的所有数列出来,以此类推把第二位、第三位、第四位、第五位上为 1的所有数都分别列出来。
位运算也是同理,只是多了一位
第一位上是1则保留在原位上,不是1那么输入0;第二位是1则项左移动一位 "1<<1";第三位是1则项左移动两位 "1<<2";第四位是1则项左移动三位 "1<<3",第五位是1则项左移动四位 "1<<4",每一次位运算后把前面的数也加起来,最后就是最终的日期啦!
String set1 = " 1 3 5 7\n" + " 9 11 13 15\n" + "17 19 21 23\n" + "25 27 29 31"; String set2 = " 2 3 6 7\n" + "10 11 14 15\n" + "18 19 22 23\n" + "26 27 30 31"; String set3 = " 4 5 6 7\n" + "12 13 14 15\n" + "20 21 22 23\n" + "28 29 30 31"; String set4 = " 8 9 10 11\n" + "12 13 14 15\n" + "24 25 26 27\n" + "28 29 30 31"; String set5 = "16 17 18 19\n" + "20 21 22 23\n" + "24 25 26 27\n" + "28 29 30 31"; int day = 0; System.out.println("你的生日(号数)在这个集合里面吗?"); System.out.println(set1); System.out.println("是,请输入1;否请输入0:"); int answer = input.nextInt(); day += answer * 1; System.out.println("你的生日(号数)在这个集合里面吗?"); System.out.println(set2); System.out.println("是,请输入1;否请输入0:"); answer = input.nextInt(); day += answer * (1<<1); System.out.println("你的生日(号数)在这个集合里面吗?"); System.out.println(set3); System.out.println("是,请输入1;否请输入0:"); answer = input.nextInt(); day += answer * (1<<2); System.out.println("你的生日(号数)在这个集合里面吗?"); System.out.println(set4); System.out.println("是,请输入1;否请输入0:"); answer = input.nextInt(); day += answer * (1<<3); System.out.println("你的生日(号数)在这个集合里面吗?"); System.out.println(set5); System.out.println("是,请输入1;否请输入0:"); answer = input.nextInt(); day += answer * (1<<4);
结合输出
System.out.println("你的生日是" + month + "月" + day + "号!");
我们来测试一下
假设我的生日是6月18日!
大家可以拷到自己的运行环境下试一下
如果内容有错误,麻烦大家指出一下,有疑问的可以评论区留言(我会解答)。
觉得挺好的可以点赞和关注,谢谢大家