0

我的任务是这样的——我需要设置一个具体的日期——1913 年 1 月 1 日,即星期三。然后我需要用户输入他们的生日。然后程序会计算这个人是在星期几出生的。我们不允许使用公历来为我们做这件事,我们需要自己输入算法。

到目前为止,我已经设置了输入,

public class FindDay4Birthdate 
{
    public static void main(String[] args) 
    {
        // declare variables
        String bbday = "";
        String bbmonth = "";
        String bbyear = "";
        int bday;
        int bmonth;
        int byear;

        String daysList[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

        Scanner sc = new Scanner(System.in);
        System.out.print("Please enter your date of birth - ");
        sc.useDelimiter("[-/.\\s]");
        if (sc.hasNext()); {
            bbday = sc.next();
            bbmonth = sc.next();
            bbyear=sc.next();
            bday = Integer.parseInt(bbday);
            bmonth = Integer.parseInt(bbmonth);
            byear = Integer.parseInt(bbyear);
        } // end if statement
    }
}

我不知道从这里去哪里。任何有关如何采取下一步措施的帮助将不胜感激。我知道我需要使用 mod 7,但不知道应该如何或在哪里使用它。

4

4 回答 4

1

1) 计算从 1913 年 1 月 1 日到用户输入之间的天数,闰年也计算 +1 天

2) 1) %7 的结果,会给你余数,如果是 0 那么它是星期三,如果不是你必须算 1= Thursday 2=Friday .etc...

于 2013-08-27T02:56:50.653 回答
1

您应该实施任何特定的算法吗?如果是这样,您能否用它更新您的问题,以便我们可以帮助您进行 Java 实现?

如果您正在为算法本身而苦苦挣扎,请查看 Wikipedia's Determination of the week of the week,以获得对计算星期几的各种方法的相当透彻的解释。

在标题为心算的基本方法的部分中给出的公式是 (d + m + y + floor(y\4) + c) mod 7 其中

  • d 是月份中的第几天,
  • m 是月份中的月份编号,
  • y 是年份的最后两位数
  • c 是世纪数。对于公历日期,如果年份的前两位数字可被 4 整除,则为 6,随后的世纪为 4-2-0(因此 2000、2100、2200 和 2300 的世纪数字分别为 6、4 , 2 和 0)。对于儒略日期,1200 为 6,随后的世纪减去 1 直到 0,此时下一个世纪为 6(因此 1300 为 5,1100 为 0)。

如果结果为 0,则日期为星期日;如果 1 是星期一,以此类推...

于 2013-08-27T02:57:21.610 回答
1

您可能正在寻找的是Zeller 的同余

于 2013-08-27T03:49:34.093 回答
0

如果您被允许使用Calendar 类(但可能不允许),请执行以下操作

Calendar birthday = Calendar.getInstance();
birthday.set(byear,bmonth - 1,bday);

//Create your time 1/1/1913
Calendar startDate = Calendar.getInstance();
startDate.set(1913,0,1);

int numberOfDays = 0;

//Loop counting days
while(startDate.before(birthday))
{
    numberOfdays++;
    startDate.add(Calendar.DATE, 1);
}

//Get index for your days array
int index = ((numberOfDays%7)+3)%7;
String day = daysList[index]; 
于 2013-08-27T03:24:55.003 回答