首页 > 解决方案 > 当它满足 if 语句时,如何将一个整数与另一个整数相加?

问题描述

我希望我的代码记录每月的某一天,比如每月的第一天,然后将其放入该月第一天所在的星期几的整数中。

例如。

星期三是 7 月的第一天,因此星期三是该月第一天的次数 + 1。

周一:0 周二:0 周三:1

但我不知道如何在 java 中编写代码。

标签: javaint

解决方案


Java 提供了您需要的类YearYearMonth、 和DayOfWeek.

确定当前年份。

    ZoneId z = ZoneId.of( "Africa/Tunis" );
    Year year = Year.now( z );

您可以Map跟踪哪些月份将一周中的哪一天作为一周的第一天。EnumMap当使用枚举作为键时,我们使用它的极端效率。

    Map < DayOfWeek, AtomicInteger > map = new EnumMap <>( DayOfWeek.class );

循环一年中的所有月份。Month枚举定义了十几个对象,一年中的每个月一个。CallingMonth.values提供了所有这些月份的数组,按时间顺序排列。

对于月份数组中的每个月,获取该YearMonth月的 。然后获取该月的第一天,并询问结果LocalDate该日期是星期几。

使用那个星期几,那个DayOfWeek枚举对象,作为映射的键。查看该键是否存在条目。如果没有,请输入一个新的AtomicInteger设置为零。再次询问该DayOfWeek枚举对象是否作为我们映射中的键存在。我们知道第二个问题确实它必须在那里,所以不需要检查null. 我们将其中的计数加AtomicInteger一,以计算YearMonth我们循环的次数。

为什么AtomicInteger不用Integer上课?因为AtomicInteger可以递增,不像Integer是不可变的。

    for ( Month month : Month.values() )
    {
        YearMonth yearMonth = year.atMonth( month );
        DayOfWeek dow = yearMonth.atDay( 1 ).getDayOfWeek();
        System.out.println( "yearMonth: " + yearMonth + " = " + yearMonth.atDay( 1 ) + " = " + dow );
        map.putIfAbsent( dow , new AtomicInteger( 0 ) );
        map.get( dow ).incrementAndGet();
    }

转储到控制台。

    System.out.println( "map = " + map );

对于 2020 年,结果是:

yearMonth: 2020-01 = 2020-01-01 = WEDNESDAY
yearMonth: 2020-02 = 2020-02-01 = SATURDAY
yearMonth: 2020-03 = 2020-03-01 = SUNDAY
yearMonth: 2020-04 = 2020-04-01 = WEDNESDAY
yearMonth: 2020-05 = 2020-05-01 = FRIDAY
yearMonth: 2020-06 = 2020-06-01 = MONDAY
yearMonth: 2020-07 = 2020-07-01 = WEDNESDAY
yearMonth: 2020-08 = 2020-08-01 = SATURDAY
yearMonth: 2020-09 = 2020-09-01 = TUESDAY
yearMonth: 2020-10 = 2020-10-01 = THURSDAY
yearMonth: 2020-11 = 2020-11-01 = SUNDAY
yearMonth: 2020-12 = 2020-12-01 = TUESDAY
map = {MONDAY=1, TUESDAY=2, WEDNESDAY=3, THURSDAY=1, FRIDAY=1, SATURDAY=2, SUNDAY=2}

推荐阅读