根据用户输入锻炼日历月的第一天

Workout first day of calendar month from user input

我目前正在做一个项目,我想知道是否还有其他人可以想出一个方程式来根据用户输入计算出日历的每月第一天。

我现在使用的等式是 ((dayOfWeek-1) - (day-1)%7)

星期几是相当于用户输入的星期几的数字。前任。 - 星期天是 1,星期一是 2,星期二是 3 等等。然后我减去一个来找到数组 m 数字位置(数组从 0 开始向上计数)。

日期是他们输入的日期,当前是该月。前任。 - 21、8、5。然后我再次减去以找到数组编号位置。数组位置然后是模数 7,找到日历开始的星期几。前任。如果我输入的日期是 21,那么它就是 21-1%7,也就是 6。

然后这两个数字就互相取走了。

示例 - ((4-1) - (21-1)%7) 3 - 20%7 3-6 答案:-3 如果我是对的,那就意味着九月从星期四开始。

有人能想出另一个方程式来给出相同但不同(更小或更大)的答案吗?

注意:不能使用类如日历。

编辑: 根据要求:

用户输入示例

年份:2016

月份:9

第 21 天

星期几:4(星期四)

日历输出:

Output example

注意:您当前的解决方案在一周中的日子较小(如星期日 ['1'])的情况下不起作用,因为 ((dayOfWeek-1) - (day-1)%7)产生零或负数。

假设:

  • daysInMonth = {1 ... 31}
  • dayInWeek = {1 ... 7}
  • daysInMonthReminder = {0 ... 6}

     int daysInMonthReminder = dayInMonth%7;
    
      if(daysInMonthReminder >= dayInWeek) {
    
        daysInMonthReminder = daysInMonthReminder - dayInWeek;
    
        dayInWeek = 7;
    
    }
    
    return ((dayInWeek - daysInMonthReminder)%7) + 1;
    
public class FirstDayInMonth {
    final static String [] daysOfWeek = {
            "Sunday",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
    };
    public static void main(String [] args) {
        try {
        int dayInMonth = Integer.parseInt(args[0]);
        int dayInWeek = Integer.parseInt(args[1]);

        int firstDayinMonth =(dayInWeek-dayInMonth%7)>=0?dayInWeek-dayInMonth%7:7+(dayInWeek-dayInMonth%7);
        System.out.println("The first day of the month is: " + daysOfWeek[firstDayinMonth]);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}