java黑色星期五代码_黑色星期五

这篇博客介绍了一个经典的问题——如何使用Java找出未来的‘黑色星期五’,即每个月13号且为星期五的日子。通过分析,确定了程序框架,利用Java的Calendar类判断每个月13号是否为星期五,从而高效地找出所有符合条件的日期。代码示例展示了如何实现这一功能,包括获取用户输入的起始年份和未来年数,然后循环判断每个13号的日期。最后,程序将输出这些‘黑色星期五’的日期。
摘要由CSDN通过智能技术生成

【问题描述 】

黑色星期五源于西方的宗教信仰与迷信:耶稣基督死在星期五,而13是不吉利的数 字。两者的结合令人相信当天会发生不幸的事情。星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的13日又恰逢星期五就叫“黑色星期五”。找出未来儿年哪些天是“黑色星期五”。

【问题分析 】

这个问题是一个很经典的“穷举+逻辑判断”的题目。通过问题描述,我们知道“黑色星期五” 要满足两个条件,一是当天是13号,二是当天还是星期五。我们可以从起始日期开始,循环判断每天是否同时满足这两个条件就可以了。这个方案很容易想到,但是一年三百多天,一天天判断是不是太慢了,有人也许会说,计算机速度快,很快就能处理完。有没有更好的办法呢,当然有了,其实条件说的很明白啊,条件之一必须满足是13号,那么我们就判断13号是不是星期五不就可以了吗,一年日期是13号的,也就12个月里,每个月一个13日,这样我们判断的日期也就缩小到每个月的13号,一年最多判断12次,比较范围大大缩小。每个月的13号到底是星期几呢?Java中的日期处理类Calendar提供的方法能够很容易地获得。

(1)确定程序框架

通过前面的分析,一年内有几个"黑色星期五",要分别判断每个月的13号是不是星期五,可以通过循环语句循环12次来实现。如果要找到未来n年内的黑色星期五,外层再用循环语句控制循环n次,这样我们就可以写出程序框架了。代码如下:

while(k

{

for (int i = 0; i < 12; i++)

{

if(当前月的13号是星期五)

{

System.out.println("黑色星期五:"+当前日期);

}

}

year++;                         //year代表起始年份

k++;

}

下面我们就需要考虑如何判断每个月13号是星期几。

(2)判断13号是星期几

每个月的13号到底是星期几呢?可以通过Java中的日期处理类Calendar提供的方法来获得。使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成,最后根据Calendar类对象信息来获得星期几。对应代码如下:

//创建一个代表2012年1月13日的Calendar对象

Calendar cal = Calendar.getInstance();          //创建对象

cal.set(2012, 1, 13);                           //日期的设置

cal.get(Calendar.DAY_OF_WEEK)-1             //星期的获得

cal.getTime()                                   //日期的获得

我们要判断每个月的13号是不是星期五,所以只要把日期的设置方法set()第二个月份参数用循环变量来代替即可。同理,如果要对其他年份进行设置,也只要把第一个年份参数替换掉即可。

【程序代码】

1 importjava.text.SimpleDateFormat;2 importjava.util.Calendar;3 importjava.util.GregorianCalendar;4 importjava.util.Scanner;5

6 public classch2_17 {8 public static voidmain(String[] args)9 {10 //TODO Auto-generated method stub

11 Scanner input=new Scanner(System.in); //获取控制台输入对象

12 System.out.print("请输入起始年份:");13 int year=input.nextInt(); //从键盘接收起始年份

14 System.out.print("请输入打算输出未来几年:");15 int n=input.nextInt(); //从键盘接收打算输出年份

16 getBlackFri(year,n); //调用得到“黑色星期五”方法

17

18 }19

20 //打印未来几年的黑色星期五,判断每个月的13号是否是星期五

21 public static void getBlackFri(int year,intn)22 {23 //year为输入的年份,n为未来多少年

24 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd E"); //日期格式对象

25 int k=0;26 Calendar cal = Calendar.getInstance(); //获得日历对象

27 while(k

28 {29 for (int i = 0; i < 12; i++) //内循环控制月份

30 {31 cal.set(year, i,13); //设置日期

32 if(5==(cal.get(Calendar.DAY_OF_WEEK)-1)) //判断是否是星期五

33 {34 System.out.println("黑色星期五:"+sdf.format(cal.getTime())); //输出格式化日期

35 }36 }37 year++; //年份增加

38 k++;39 }40 }41 }

【运行结果】

8a3382b76c133b607b6bc4f09b08cbc4.png

【相关知识】

Calendar类的用法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值