> 文档中心 > 【准确猜出你的生日】——Java小练习

【准确猜出你的生日】——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日!

大家可以拷到自己的运行环境下试一下

如果内容有错误,麻烦大家指出一下,有疑问的可以评论区留言(我会解答)。

觉得挺好的可以点赞和关注,谢谢大家